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

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Mon Nov 20 11:30:33 MST 2006


Author: rizzo
Date: Mon Nov 20 12:30:33 2006
New Revision: 47858

URL: http://svn.digium.com/view/asterisk?view=rev&rev=47858
Log:
misc merges from trunk, and changes of sip_destroy to pvt_unref
where necessary.


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=47858&r1=47857&r2=47858
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Mon Nov 20 12:30:33 2006
@@ -2203,6 +2203,7 @@
 				if (sipdebug && option_debug > 3)
 					ast_log(LOG_DEBUG, "** SIP TIMER: Cancelling retransmit of packet (reply received) Retransid #%d\n", cur->retransid);
 				ast_sched_del(sched, cur->retransid);
+				cur->retransid = -1;
 			}
 			UNLINK(cur, p->packets, prev);
 			cur->pvt = pvt_unref(cur->pvt);
@@ -2248,8 +2249,8 @@
 				if (option_debug > 3 && sipdebug)
 					ast_log(LOG_DEBUG, "*** SIP TIMER: Cancelling retransmission #%d - %s (got response)\n", cur->retransid, sip_methods[sipmethod].text);
 				ast_sched_del(sched, cur->retransid);
+				cur->retransid = -1;
 			}
-			cur->retransid = -1;
 			res = 0;
 			break;
 		}
@@ -5480,7 +5481,7 @@
 					p->owner->name, 
 					p->owner->uniqueid);
 			if (global_notifyhold)
-				sip_peer_hold(p, 0);
+				sip_peer_hold(p, FALSE);
 		} 
 		ast_clear_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD);	/* Clear both flags */
 	} else if (!sin.sin_addr.s_addr || sendonly ) {
@@ -5498,7 +5499,8 @@
 			ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_ONEDIR);
 		else if (sendonly == 2)	/* Inactive stream */
 			ast_set_flag(&p->flags[1], SIP_PAGE2_CALL_ONHOLD_INACTIVE);
-		sip_peer_hold(p, 1);
+		if (global_notifyhold)
+			sip_peer_hold(p, TRUE);
 	}
 	
 	return 0;
@@ -6983,7 +6985,6 @@
 	
 	req.method = sipmethod;
 	if (init) { /* Bump branch even on initial requests */
-		/* Bump branch even on initial requests */
 		p->branch ^= ast_random();
 		build_via(p);
 	}
@@ -7371,21 +7372,18 @@
 	if (!r)
 		return 0;
 
-	p = r->register_pvt;
 	ast_log(LOG_NOTICE, "   -- Registration for '%s@%s' timed out, trying again (Attempt #%d)\n", r->username, r->hostname, r->regattempts); 
-	if (p) {
+	if (r->register_pvt) {
 		/* Unlink us, destroy old call.  Locking is not relevant here because all this happens
 		   in the single SIP manager thread. */
-		/* clear register_pvt to prevent unref_registry from killing the session.
-		 * the actual destruction is done down in sip_destroy().
-		 */
-		r->register_pvt = NULL;
+		/* XXX p->registry == r so and r has 2 refs, so the unref won't take the object away */
+		p = r->register_pvt;
 		if (p->registry)
 			unref_registry(p->registry);
 		set_destroy(p);	/* XXX why do that if we are going to kill it in a moment ? */
 		/* Pretend to ACK anything just in case */
 		__sip_pretend_ack(p); /* XXX we need p locked, not sure we have */
-		sip_destroy(p);	/* reference goes away */
+		r->register_pvt = pvt_unref(r->register_pvt);	/* reference goes away */
 	}
 	/* If we have a limit, stop registration and give up */
 	if (global_regattempts_max && (r->regattempts > global_regattempts_max)) {
@@ -12314,8 +12312,8 @@
 		if (global_regattempts_max)
 			p->registry->regattempts = global_regattempts_max+1;
 		set_destroy(p);
-		if (r->register_pvt)	/* XXX are we sure about destroy ? */
-			r->register_pvt = sip_destroy(r->register_pvt);
+		if (r->register_pvt)
+			r->register_pvt = pvt_unref(r->register_pvt);
 		ast_sched_del(sched, r->timeout);
 		r->timeout = -1;
 		break;
@@ -12330,8 +12328,8 @@
 		ast_log(LOG_WARNING, "Got 423 Interval too brief for service %s@%s, minimum is %d seconds\n", p->registry->username, p->registry->hostname, r->expiry);
 		ast_sched_del(sched, r->timeout);
 		r->timeout = -1;
-		if (r->register_pvt) {	/* XXX are we sure about destroy ? */
-			r->register_pvt = sip_destroy(r->register_pvt);
+		if (r->register_pvt) {
+			r->register_pvt = pvt_unref(r->register_pvt);
 			set_destroy(p);
 		}
 		if (r->expiry > max_expiry) {
@@ -12349,8 +12347,8 @@
 		if (global_regattempts_max)
 			p->registry->regattempts = global_regattempts_max+1;
 		set_destroy(p);
-		if (r->register_pvt)	/* XXX are we sure about destroy ? */
-			r->register_pvt = sip_destroy(r->register_pvt);
+		if (r->register_pvt)
+			r->register_pvt = pvt_unref(r->register_pvt);
 		ast_sched_del(sched, r->timeout);
 		r->timeout = -1;
 		break;



More information about the asterisk-commits mailing list