[xmppd-dev] commit r1558 - trunk/jabberd14/resolver

mail at jabberd.org mail at jabberd.org
Sun Mar 22 02:40:21 CET 2009


Author: mawis
Date: Sun Mar 22 02:40:21 2009
New Revision: 1558

Log:
Do not delete resolver_job explicitly - we use xmppd::pointer for that
do not add new packets to a resolver_job, when it has already finished
keep the resolver_job in finished_jobs until it returned from event handling (TODO: cleanup finished_jobs after they have returned)

Modified:
   trunk/jabberd14/resolver/resolver.cc
   trunk/jabberd14/resolver/resolver.h

Modified: trunk/jabberd14/resolver/resolver.cc
==============================================================================
--- trunk/jabberd14/resolver/resolver.cc	Sun Mar 22 02:08:40 2009	(r1557)
+++ trunk/jabberd14/resolver/resolver.cc	Sun Mar 22 02:40:21 2009	(r1558)
@@ -196,6 +196,11 @@
 	}
 
 	void resolver::handle_completed_job(resolver_job& job) {
+	    // move the job from pending to finished
+	    char const* host = job.get_packets().front()->host;
+	    finished_jobs.push_back(pending_jobs[host]);
+	    pending_jobs.erase(host);
+
 	    // get the packets
 	    std::list<dpacket> const& packets = job.get_packets();
 
@@ -209,9 +214,6 @@
 	    for (std::list<dpacket>::const_iterator p = packets.begin(); p != packets.end(); ++p) {
 		resend_packet((*p)->x, ips, resend_host);
 	    }
-
-	    // we are done with it, we can delete the job
-	    delete &job;
 	}
     }
 }

Modified: trunk/jabberd14/resolver/resolver.h
==============================================================================
--- trunk/jabberd14/resolver/resolver.h	Sun Mar 22 02:08:40 2009	(r1557)
+++ trunk/jabberd14/resolver/resolver.h	Sun Mar 22 02:40:21 2009	(r1558)
@@ -380,6 +380,13 @@
 		xmppd::xhash< xmppd::pointer<resolver_job> > pending_jobs;
 
 		/**
+		 * the jobs that have finished
+		 *
+		 * @todo we have to delete these jobs, after they returned
+		 */
+		std::list< xmppd::pointer<resolver_job> > finished_jobs;
+
+		/**
 		 * map containing the listeners for resolver results
 		 *
 		 * the key is the query serial which will be in the result


More information about the dev mailing list