[asterisk-commits] rizzo: branch rizzo/astobj2 r47872 - /team/rizzo/astobj2/channels/chan_sip.c

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Nov 21 00:34:12 MST 2006


Author: rizzo
Date: Tue Nov 21 01:34:11 2006
New Revision: 47872

URL: http://svn.digium.com/view/asterisk?view=rev&rev=47872
Log:
move destruction of some fields from pvt_destructor to __sip_destroy().
They cannot be triggered in the former because they hold references to
the pvt itself.


Modified:
    team/rizzo/astobj2/channels/chan_sip.c

Modified: team/rizzo/astobj2/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/rizzo/astobj2/channels/chan_sip.c?view=diff&rev=47872&r1=47871&r2=47872
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Tue Nov 21 01:34:11 2006
@@ -3144,26 +3144,6 @@
 		free_old_route(p->route);
 		p->route = NULL;
 	}
-	if (p->registry) {
-		/* XXX why this is only for ourselves ?
-		 * in any case, if it is for ourselves, the destructor
-		 * would not be called in astobj2
-		 */
-		if (p->registry->register_pvt == p)
-			p->registry->register_pvt = pvt_unref(p->registry->register_pvt);
-		unref_registry(p->registry);
-	}
-
-	/* Unlink us from the owner if we have one */
-	if (p->owner) { /* XXX never taken ? */
-		ast_verbose("pvt_destructor %p owner->tech_pvt %p\n",
-			p, p->owner->tech_pvt);
-		ast_channel_lock(p->owner);
-		if (option_debug)
-			ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
-		p->owner->tech_pvt = pvt_unref(p->owner->tech_pvt);	/* self pointer, basically */
-		ast_channel_unlock(p->owner);
-	}
 	/* Clear history */
 	if (p->history) {
 		struct sip_history *hist;
@@ -3200,6 +3180,26 @@
 			ast_sched_del(sched, cp->retransid);
 		cp->pvt = pvt_unref(cp->pvt);
 		free(cp);
+	}
+	if (p->registry) {
+		/* XXX why this is only for ourselves ?
+		 * in any case, if it is for ourselves, the destructor
+		 * would not be called in astobj2
+		 */
+		if (p->registry->register_pvt == p)
+			p->registry->register_pvt = pvt_unref(p->registry->register_pvt);
+		unref_registry(p->registry);
+	}
+
+	/* Unlink us from the owner if we have one */
+	if (p->owner) { /* XXX never taken ? */
+		ast_verbose("pvt_destructor %p owner->tech_pvt %p\n",
+			p, p->owner->tech_pvt);
+		ast_channel_lock(p->owner);
+		if (option_debug)
+			ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
+		p->owner->tech_pvt = pvt_unref(p->owner->tech_pvt);	/* self pointer, basically */
+		ast_channel_unlock(p->owner);
 	}
 #ifdef USE_AO2
 {	/* debugging */



More information about the asterisk-commits mailing list