[svn-commits] murf: branch murf/bug11210 r93535 - in /team/murf/bug11210: channels/ main/
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Mon Dec 17 23:50:16 CST 2007
Author: murf
Date: Mon Dec 17 23:50:15 2007
New Revision: 93535
URL: http://svn.digium.com/view/asterisk?view=rev&rev=93535
Log:
Good. the dialog callids change, hadn't known that. Now I do. Unlink and relink in the hash table under new name. Sip works better now.
Modified:
team/murf/bug11210/channels/chan_sip.c
team/murf/bug11210/main/sched.c
Modified: team/murf/bug11210/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug11210/channels/chan_sip.c?view=diff&rev=93535&r1=93534&r2=93535
==============================================================================
--- team/murf/bug11210/channels/chan_sip.c (original)
+++ team/murf/bug11210/channels/chan_sip.c Mon Dec 17 23:50:15 2007
@@ -1483,8 +1483,6 @@
{
struct sip_peer *peer = obj, *peer2 = arg;
- ast_log(LOG_NOTICE,"peer %s == peer %s ? %d\n", peer->name, peer2->name, !strcasecmp(peer->name, peer2->name) ? CMP_MATCH : 0);
-
return !strcasecmp(peer->name, peer2->name) ? CMP_MATCH : 0;
}
@@ -1542,7 +1540,6 @@
{
struct sip_user *user = obj, *user2 = arg;
- ast_log(LOG_NOTICE,"user %s == user %s ? %d\n", user->name, user2->name, !strcasecmp(user->name, user2->name) ? CMP_MATCH : 0);
return !strcasecmp(user->name, user2->name) ? CMP_MATCH : 0;
}
@@ -1562,7 +1559,8 @@
static int dialog_cmp_cb(void *obj, void *arg, int flags)
{
struct sip_pvt *pvt = obj, *pvt2 = arg;
- ast_log(LOG_NOTICE,"dialog %s == obj %s ? %d\n", pvt->callid, pvt2->callid, !strcasecmp(pvt->callid, pvt2->callid) ? CMP_MATCH : 0);
+ ast_log(LOG_NOTICE, "dialog_cmp_cb(%s,%s) ? %d\n", pvt->callid, pvt2->callid, !strcasecmp(pvt->callid, pvt2->callid) ? CMP_MATCH : 0);
+
return !strcasecmp(pvt->callid, pvt2->callid) ? CMP_MATCH : 0;
}
@@ -2109,12 +2107,14 @@
dialog->registry = registry_unref(dialog->registry, "delete dialog->registry");
}
if (dialog->initid > -1) {
+ ast_log(LOG_WARNING,"About to sched_del autocongest for dialog %s in dialog_unlink_all\n", dialog->callid);
if (ast_sched_del(sched, dialog->initid)==0)
dialog_unref(dialog,"when you delete the initid sched, you should dec the refcount for the stored dialog ptr");
dialog->initid = -1;
}
if (dialog->autokillid > -1) {
+ ast_log(LOG_WARNING,"About to sched_del autokill for dialog %s in dialog_unlink_all\n", dialog->callid);
if (ast_sched_del(sched, dialog->autokillid)==0)
dialog_unref(dialog,"when you delete the autokillid sched, you should dec the refcount for the stored dialog ptr");
dialog->autokillid = -1;
@@ -2483,7 +2483,8 @@
struct sip_pkt *pkt = (struct sip_pkt *)data, *prev, *cur = NULL;
int reschedule = DEFAULT_RETRANS;
int xmitres = 0;
-
+ ast_log(LOG_NOTICE,"SCHED: Retrans_pkt called---\n");
+
/* Lock channel PVT */
sip_pvt_lock(pkt->owner);
@@ -2637,6 +2638,7 @@
if (xmitres == XMIT_ERROR) { /* Serious network trouble, no need to try again */
append_history(pkt->owner, "XmitErr", "%s", pkt->is_fatal ? "(Critical)" : "(Non-critical)");
+ ast_log(LOG_WARNING,"About to sched_del pkt->retransid (%d) in __sip_reliable_xmit\n", pkt->retransid);
ast_sched_del(sched, pkt->retransid); /* No more retransmission */
pkt->retransid = -1;
return AST_FAILURE;
@@ -2653,6 +2655,7 @@
{
struct sip_pvt *p = (struct sip_pvt *)data;
+ ast_log(LOG_NOTICE,"SCHED: __sip_autodestruct called--- kill dialog\n");
/* If this is a subscription, tell the phone that we got a timeout */
if (p->subscribed) {
transmit_state_notify(p, AST_EXTENSION_DEACTIVATED, 1, TRUE); /* Send last notification */
@@ -2674,7 +2677,7 @@
p->relatedpeer = unref_peer(p->relatedpeer,"__sip_autodestruct: unref peer p->relatedpeer"); /* Remove link to peer. If it's realtime, make sure it's gone from memory) */
/* Reset schedule ID */
- p->autokillid = -1;
+ p->autokillid = -1; /* HUH? Won't this cause problems? the event is still scheduled? */
if (p->owner) {
ast_log(LOG_WARNING, "Autodestruct on dialog '%s' with owner in place (Method: %s)\n", p->callid, sip_methods[p->method].text);
@@ -2713,6 +2716,7 @@
sip_cancel_destroy(p);
if (p->do_history)
append_history(p, "SchedDestroy", "%d ms", ms);
+ ast_log(LOG_WARNING,"About to sched_add sip_autodestruct for dialog %s in sip_scheddestroy\n", p->callid);
p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, dialog_ref(p,"sip_scheddestroy: setting ref as passing into ast_sched_add"));
}
@@ -2723,7 +2727,9 @@
static void sip_cancel_destroy(struct sip_pvt *p)
{
if (p->autokillid > -1) {
- int res3 = ast_sched_del(sched, p->autokillid);
+ int res3;
+ ast_log(LOG_WARNING,"About to sched_del autokillid(%d) for dialog %s in sip_cancel_destroy\n", p->autokillid, p->callid);
+ res3 = ast_sched_del(sched, p->autokillid);
append_history(p, "CancelDestroy", "");
p->autokillid = -1;
if (res3 == 0)
@@ -2759,6 +2765,7 @@
if (cur->retransid > -1) {
if (sipdebug)
ast_debug(4, "** SIP TIMER: Cancelling retransmit of packet (reply received) Retransid #%d\n", cur->retransid);
+ ast_log(LOG_WARNING,"About to sched_del retransid=%d in __sip_ack\n", cur->retransid);
ast_sched_del(sched, cur->retransid);
cur->retransid = -1;
}
@@ -2804,6 +2811,7 @@
if (cur->retransid > -1) {
if (sipdebug)
ast_debug(4, "*** SIP TIMER: Cancelling retransmission #%d - %s (got response)\n", cur->retransid, sip_methods[sipmethod].text);
+ ast_log(LOG_WARNING,"About to sched_del retransid=%d in __sip_semi_ack\n", cur->retransid);
ast_sched_del(sched, cur->retransid);
cur->retransid = -1;
}
@@ -3216,9 +3224,11 @@
ast_variables_destroy(peer->chanvars);
peer->chanvars = NULL;
}
- if (peer->expire > -1)
+ if (peer->expire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del peer->expire = %d in __sip_destroy_peer\n", peer->expire);
ast_sched_del(sched, peer->expire);
-
+ }
+
if (peer->pokeexpire > -1)
ast_sched_del(sched, peer->pokeexpire);
register_peer_exten(peer, FALSE);
@@ -3414,6 +3424,7 @@
/* Cache peer */
ast_copy_flags(&peer->flags[1],&global_flags[1], SIP_PAGE2_RTAUTOCLEAR|SIP_PAGE2_RTCACHEFRIENDS);
if (ast_test_flag(&global_flags[1], SIP_PAGE2_RTAUTOCLEAR)) {
+ ast_log(LOG_WARNING,"About to sched_replace peer->expire = %d in realtime_peer\n", peer->expire);
peer->expire = ast_sched_replace(peer->expire, sched,
global_rtautoclear * 1000, expire_register, (void *) peer);
}
@@ -3686,11 +3697,14 @@
if (!dialog->initreq.headers) {
char *c;
char *tmpcall = ast_strdupa(dialog->callid);
-
+ /* this sure looks to me like we are going to change the callid on this dialog!! */
c = strchr(tmpcall, '@');
if (c) {
*c = '\0';
+ ao2_unlink(dialogs,dialog,"About to change the callid -- remove the old name");
ast_string_field_build(dialog, callid, "%s@%s", tmpcall, peer->fromdomain);
+ ao2_link(dialogs,dialog,"New dialog callid -- inserted back into table");
+ ast_log(LOG_NOTICE,"============================================================Changed Dialog name to %s\n", dialog->callid);
}
}
}
@@ -3798,6 +3812,7 @@
{
struct sip_pvt *p = (struct sip_pvt *)arg;
+ ast_log(LOG_NOTICE,"SCHED: auto_congest called for dialog %s---\n", p->callid);
sip_pvt_lock(p);
p->initid = -1; /* event gone, will not be rescheduled */
if (p->owner) {
@@ -3897,6 +3912,7 @@
p->invitestate = INV_CALLING;
/* Initialize auto-congest time */
+ ast_log(LOG_WARNING,"About to sched_replace autocongest for dialog %s in sip_call\n", p->callid);
p->initid = ast_sched_replace(p->initid, sched, p->timer_b,
auto_congest, dialog_ref(p,"this is a pointer for the autocongest callback to use"));
}
@@ -3922,10 +3938,16 @@
reg->call = dialog_unref(reg->call,"unref reg->call");
/* reg->call = sip_destroy(reg->call); */
}
- if (reg->expire > -1)
+ if (reg->expire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del reg->expire in sip_registry_destroy\n");
ast_sched_del(sched, reg->expire);
- if (reg->timeout > -1)
+ }
+
+ if (reg->timeout > -1) {
+ ast_log(LOG_WARNING,"About to sched_del reg->timeout in sip_registry_destroy\n");
ast_sched_del(sched, reg->timeout);
+ }
+
ast_string_field_free_memory(reg);
regobjs--;
ast_free(reg);
@@ -3966,15 +3988,21 @@
if (p->stateid > -1)
ast_extension_state_del(p->stateid, NULL);
if (p->waitid > -1)
+ {
+ ast_log(LOG_WARNING,"About to sched_del waitid(%d) for dialog %s in __sip_destroy\n", p->waitid, p->callid);
ast_sched_del(sched, p->waitid);
+ }
+
if (p->initid > -1) {
/* Don't auto congest anymore since we've gotten something useful back */
+ ast_log(LOG_WARNING,"About to sched_del p->initid for dialog %s in __sip_destroy\n", p->callid);
if (ast_sched_del(sched, p->initid) == 0)
dialog_unref(p,"when you delete the initid sched, you should dec the refcount for the stored dialog ptr");
p->initid = -1;
}
if (p->autokillid > -1) {
+ ast_log(LOG_WARNING,"About to sched_del autokillid(%d) for dialog %s in __sip_destroy\n", p->autokillid, p->callid);
if (ast_sched_del(sched, p->autokillid)==0)
dialog_unref(p,"when you delete the autokillid sched, you should dec the refcount for the stored dialog ptr");
p->autokillid = -1;
@@ -4009,8 +4037,11 @@
/* remove all current packets in this dialog */
while((cp = p->packets)) {
p->packets = p->packets->next;
- if (cp->retransid > -1)
+ if (cp->retransid > -1) {
+ ast_log(LOG_WARNING,"About to sched_del retransid(%d) in __sip_destroy\n", cp->retransid);
ast_sched_del(sched, cp->retransid); /* HUH??? */
+ }
+
cp->owner = dialog_unref(cp->owner,"free cp->owner dialog before freeing the pkt");
ast_free(cp);
}
@@ -4435,6 +4466,7 @@
if ( p->initid != -1 ) {
/* channel still up - reverse dec of inUse counter
only if the channel is not auto-congested */
+ ast_log(LOG_WARNING,"About to update_call_counter autocongest for dialog %s in sip_hangup\n", p->callid);
update_call_counter(p, INC_CALL_LIMIT);
}
} else { /* Incoming call, not up */
@@ -4479,8 +4511,11 @@
but we can't send one while we have "INVITE" outstanding. */
ast_set_flag(&p->flags[0], SIP_PENDINGBYE);
ast_clear_flag(&p->flags[0], SIP_NEEDREINVITE);
- if (p->waitid)
+ if (p->waitid) {
+ ast_log(LOG_WARNING,"About to sched_del waitid(%d) for dialog %s in sip_hangup\n", p->waitid, p->callid);
ast_sched_del(sched, p->waitid);
+ }
+
p->waitid = -1;
sip_cancel_destroy(p);
}
@@ -5311,7 +5346,6 @@
{
struct sip_pvt *p;
struct sip_pvt *p2;
- int rc;
ast_log(LOG_NOTICE,"allocating PVT for %s\n", callid);
if (!(p = ao2_alloc(sizeof(*p), sip_destroy_fn, "allocate a dialog(pvt) struct")))
@@ -5445,9 +5479,9 @@
}
ao2_link(dialogs, p, "link pvt into dialogs table");
- rc = ao2_ref(p, 0,"");
+ ast_log(LOG_NOTICE,"***Just linked %s into dialogs table\n", p->callid);
- ast_debug(1, "Allocating new SIP dialog for %s - %s (%s)\n", callid ? callid : "(No Call-ID)", sip_methods[intended_method].text, p->rtp ? "With RTP" : "No RTP");
+ ast_debug(1, "Allocating new SIP dialog for %s - %s (%s)\n", callid ? callid : p->callid, sip_methods[intended_method].text, p->rtp ? "With RTP" : "No RTP");
return p;
}
@@ -5512,10 +5546,12 @@
ast_log(LOG_NOTICE,"Found CALL dialog %s, refcount = %d\n", tmp_dialog.callid, rc);
if (!(!pedanticsipchecking || !tag || ast_strlen_zero(sip_pvt_ptr->theirtag) || !strcmp(sip_pvt_ptr->theirtag, tag)))
{
+ ast_log(LOG_NOTICE,"Pedantic Zero of dialog %s (1)\n", callid);
+
ao2_ref(sip_pvt_ptr,-1,"pedantic failure, pointer erase"); /* basically, if the extra pedanticssipchecking constraints don't pan out,
the the match is defeated. There should be no other entry that matches
the callid */
- sip_pvt_ptr = 0;
+ sip_pvt_ptr = NULL;
}
/* If we get a new request within an existing to-tag - check the to tag as well */
if (pedanticsipchecking && sip_pvt_ptr && req->method != SIP_RESPONSE) { /* SIP Request */
@@ -5523,10 +5559,12 @@
/* We have no to tag, but they have. Wrong dialog */
ao2_ref(sip_pvt_ptr,-1,"pedantic failure, pointer erased 2");
sip_pvt_ptr = NULL;
+ ast_log(LOG_NOTICE,"Pedantic Zero of dialog %s (2)\n", callid);
} else if (totag[0]) { /* Both have tags, compare them */
if (strcmp(totag, sip_pvt_ptr->tag)) {
ao2_ref(sip_pvt_ptr,-1, "pedantic totag failure, pointer erased 3");
sip_pvt_ptr = NULL; /* This is not our packet */
+ ast_log(LOG_NOTICE,"Pedantic Zero of dialog %s (3)\n", callid);
}
}
if (!sip_pvt_ptr)
@@ -5535,6 +5573,19 @@
}
ast_string_field_free_memory(&tmp_dialog);
+ if (!sip_pvt_ptr) {
+ struct ao2_iterator i;
+ struct sip_pvt *d2;
+
+ ast_log(LOG_NOTICE,"Dialog %s not found\n", callid);
+ i = ao2_iterator_init(dialogs, 0);
+
+ while ((d2 = ao2_iterator_next(&i,"iterate thru dialogs "))) {
+ ast_log(LOG_NOTICE, "Dialogs: %s\n", d2->callid);
+ ao2_ref(d2,-1,"done with d2 pointer");
+ }
+ }
+
if (sip_pvt_ptr) {
/* Found the call */
sip_pvt_lock(sip_pvt_ptr);
@@ -5556,9 +5607,6 @@
} else {
/* Ok, time to create a new SIP dialog object, a pvt */
if ((p = sip_alloc(callid, sin, 1, intended_method))) {
- int rc = ao2_ref(p,0,"");
- ast_log(LOG_NOTICE,"Couldn't find call %s, so CREATED dialog, refcount = %d\n",
- callid, rc);
/* Ok, we've created a dialog, let's go and process it */
sip_pvt_lock(p);
} else {
@@ -8503,6 +8551,7 @@
/* if we are here, we know that we need to reregister. */
struct sip_registry *r= registry_addref((struct sip_registry *) data,"reg_addref from sip_reregister");
+ ast_log(LOG_NOTICE,"SCHED: sip_reregister called---\n");
/* if we couldn't get a reference to the registry object, punt */
if (!r)
return 0;
@@ -8543,6 +8592,7 @@
struct sip_pvt *p;
int res;
+ ast_log(LOG_NOTICE,"SCHED: sip_reg_timeout called---\n");
/* if we couldn't get a reference to the registry object, punt */
if (!r)
return 0;
@@ -8636,11 +8686,13 @@
dialog_unref(p, "unref dialog after unlink_all");
/* sip_destroy(p); */
if (r->timeout > -1) {
+ ast_log(LOG_WARNING,"About to sched_replace reg timeout(%d) for reg in transmit_register\n", r->timeout);
r->timeout = ast_sched_replace(r->timeout, sched,
global_reg_timeout * 1000, sip_reg_timeout, r);
ast_log(LOG_WARNING, "Still have a registration timeout for %s@%s (create_addr() error), %d\n", r->username, r->hostname, r->timeout);
} else {
r->timeout = ast_sched_add(sched, global_reg_timeout*1000, sip_reg_timeout, r);
+ ast_log(LOG_WARNING,"Just did sched_add reg timeout(%d) for reg in transmit_register\n", r->timeout);
ast_log(LOG_WARNING, "Probably a DNS error for registration to %s@%s, trying REGISTER again (after %d seconds)\n", r->username, r->hostname, global_reg_timeout);
}
r->regattempts++;
@@ -8689,6 +8741,7 @@
if (auth == NULL) {
if (r->timeout > -1)
ast_log(LOG_WARNING, "Still have a registration timeout, #%d - deleting it\n", r->timeout);
+ ast_log(LOG_WARNING,"About to sched_replace reg timeout(%d) for reg in transmit_register\n", r->timeout);
r->timeout = ast_sched_replace(r->timeout, sched, global_reg_timeout * 1000, sip_reg_timeout, r);
ast_debug(1, "Scheduled a registration timeout for %s id #%d \n", r->hostname, r->timeout);
}
@@ -8995,6 +9048,7 @@
{
struct sip_peer *peer = (struct sip_peer *)data;
+ ast_log(LOG_NOTICE,"SCHED: expire_register called---\n");
if (!peer) /* Hmmm. We have no peer. Weird. */
return 0;
@@ -9032,6 +9086,7 @@
{
struct sip_peer *peer = (struct sip_peer *)data;
+ ast_log(LOG_NOTICE,"SCHED: sip_poke_peer_s called---\n");
peer->pokeexpire = -1;
sip_poke_peer(peer);
return 0;
@@ -9085,10 +9140,12 @@
peer->addr.sin_port = htons(port);
if (sipsock < 0) {
/* SIP isn't up yet, so schedule a poke only, pretty soon */
+ ast_log(LOG_WARNING,"About to sched_replace peer pokeexpire(%d) for peer in reg_source_db\n", peer->pokeexpire);
peer->pokeexpire = ast_sched_replace(peer->pokeexpire, sched,
ast_random() % 5000 + 1, sip_poke_peer_s, peer);
} else
sip_poke_peer(peer);
+ ast_log(LOG_WARNING,"About to sched_replace peer expire(%d) for peer in reg_source_db\n", peer->expire);
peer->expire = ast_sched_replace(peer->expire, sched,
(expiry + 10) * 1000, expire_register, peer);
register_peer_exten(peer, TRUE);
@@ -9203,8 +9260,11 @@
} else if (!strcasecmp(curi, "*") || !expiry) { /* Unregister this peer */
/* This means remove all registrations and return OK */
memset(&peer->addr, 0, sizeof(peer->addr));
- if (peer->expire > -1)
+ if (peer->expire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del peer expire(%d) for peer in parse_register_result\n", peer->expire);
ast_sched_del(sched, peer->expire);
+ }
+
peer->expire = -1;
destroy_association(peer);
@@ -9254,6 +9314,7 @@
ast_copy_string(peer->username, curi, sizeof(peer->username));
if (peer->expire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del peer expire(%d) for peer in parse_register_result\n", peer->expire);
ast_sched_del(sched, peer->expire);
peer->expire = -1;
}
@@ -9263,6 +9324,7 @@
expiry = min_expiry;
peer->expire = peer->is_realtime ? -1 :
ast_sched_add(sched, (expiry + 10) * 1000, expire_register, peer);
+ ast_log(LOG_WARNING,"Just did sched_add peer expire(%d) for peer in parse_register_result\n", peer->expire);
pvt->expiry = expiry;
snprintf(data, sizeof(data), "%s:%d:%d:%s:%s", ast_inet_ntoa(peer->addr.sin_addr), ntohs(peer->addr.sin_port), expiry, peer->username, peer->fullcontact);
if (!peer->rt_fromcontact)
@@ -13219,7 +13281,11 @@
/* Recalculate our side, and recalculate Call ID */
ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip);
build_via(p);
+ ast_log(LOG_NOTICE,"====================================About to build callid for %s\n", p->callid);
+ ao2_unlink(dialogs,p,"About to change the callid -- remove the old name");
build_callid_pvt(p);
+ ao2_link(dialogs,p,"Linking in new name");
+ ast_log(LOG_NOTICE,"====================================New callid: %s\n", p->callid);
ast_cli(a->fd, "Sending NOTIFY of type '%s' to '%s'\n", a->argv[2], a->argv[i]);
dialog_ref(p,"bump the count of p, which transmit_sip_request will decrement.");
transmit_sip_request(p, &req);
@@ -13821,6 +13887,7 @@
{
struct sip_pvt *p = (struct sip_pvt *) data;
+ ast_log(LOG_NOTICE,"SCHED: sip_reinvite_retry called---\n");
ast_set_flag(&p->flags[0], SIP_NEEDREINVITE);
p->waitid = -1;
return 0;
@@ -13849,6 +13916,7 @@
/* Acknowledge sequence number - This only happens on INVITE from SIP-call */
if (p->initid > -1) {
/* Don't auto congest anymore since we've gotten something useful back */
+ ast_log(LOG_WARNING,"About to sched_del initd (autocongest) for dialog %s in handle_response_invite\n", p->callid);
if (ast_sched_del(sched, p->initid) == 0)
dialog_unref(p,"when you delete the initid sched, you should dec the refcount for the stored dialog ptr");
p->initid = -1;
@@ -14129,6 +14197,7 @@
*/
int wait = 3 + ast_random() % 5;
p->waitid = ast_sched_add(sched, wait, sip_reinvite_retry, p);
+ ast_log(LOG_WARNING,"just did sched_add waitid(%d) for sip_reinvite_retry for dialog %s in handle_response_invite\n", p->waitid, p->callid);
ast_debug(2, "Reinvite race. Waiting %d secs before retry\n", wait);
}
}
@@ -14219,6 +14288,7 @@
break;
case 403: /* Forbidden */
ast_log(LOG_WARNING, "Forbidden - wrong password on authentication for REGISTER for '%s' to '%s'\n", p->registry->username, p->registry->hostname);
+ ast_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 403\n", r->timeout);
ast_sched_del(sched, r->timeout);
r->timeout = -1;
r->regstate = REG_STATE_NOAUTH;
@@ -14230,6 +14300,7 @@
if (r->call)
r->call = dialog_unref(r->call,"unsetting registry->call pointer-- case 404");
r->regstate = REG_STATE_REJECTED;
+ ast_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 404\n", r->timeout);
ast_sched_del(sched, r->timeout);
r->timeout = -1;
break;
@@ -14245,12 +14316,14 @@
p->needdestroy = 1;
if (r->call)
r->call = dialog_unref(r->call,"unsetting registry->call pointer-- case 408");
+ ast_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 408\n", r->timeout);
ast_sched_del(sched, r->timeout);
r->timeout = -1;
break;
case 423: /* Interval too brief */
r->expiry = atoi(get_header(req, "Min-Expires"));
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_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 423\n", r->timeout);
ast_sched_del(sched, r->timeout);
r->timeout = -1;
if (r->call) {
@@ -14273,6 +14346,7 @@
if (r->call)
r->call = dialog_unref(r->call,"unsetting registry->call pointer-- case 479");
r->regstate = REG_STATE_REJECTED;
+ ast_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 479\n", r->timeout);
ast_sched_del(sched, r->timeout);
r->timeout = -1;
break;
@@ -14290,6 +14364,7 @@
ast_debug(1, "Registration successful\n");
if (r->timeout > -1) {
ast_debug(1, "Cancelling timeout %d\n", r->timeout);
+ ast_log(LOG_WARNING,"About to sched_del registry timeout(%d) for reg in handle_response_register state 200\n", r->timeout);
ast_sched_del(sched, r->timeout);
}
r->timeout=-1;
@@ -14302,8 +14377,11 @@
/* set us up for re-registering */
/* figure out how long we got registered for */
- if (r->expire > -1)
+ if (r->expire > -1){
+ ast_log(LOG_WARNING,"About to sched_del registry expire(%d) for reg in handle_response_register state 200\n", r->expire);
ast_sched_del(sched, r->expire);
+ }
+
/* according to section 6.13 of RFC, contact headers override
expires headers, so check those first */
expires = 0;
@@ -14347,6 +14425,7 @@
r->refresh= (int) expires_ms / 1000;
/* Schedule re-registration before we expire */
+ ast_log(LOG_WARNING,"About to sched_replace registry expire(%d) for reg in handle_response_register near end\n", r->expire);
r->expire = ast_sched_replace(r->expire, sched, expires_ms, sip_reregister, r);
registry_unref(r,"unref registry ptr r"); /* HUH? if this gets deleted, p->registry will be a bad pointer! */
/* shouldn't this be:
@@ -14399,6 +14478,7 @@
p->needdestroy = 1;
/* Try again eventually */
+ ast_log(LOG_WARNING,"About to sched_replace peer pokeexpire(%d) for peer in handle_response_peerpoke\n", peer->pokeexpire);
peer->pokeexpire = ast_sched_replace(peer->pokeexpire, sched,
is_reachable ? DEFAULT_FREQ_OK : DEFAULT_FREQ_NOTOK,
sip_poke_peer_s, peer);
@@ -17357,8 +17437,12 @@
}
/* Recalculate our side, and recalculate Call ID */
ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip);
+ ast_log(LOG_NOTICE,"====================================About to build callid for %s\n", p->callid);
build_via(p);
+ ao2_unlink(dialogs,p,"About to change the callid -- remove the old name");
build_callid_pvt(p);
+ ao2_link(dialogs,p,"Linking in under new name");
+ ast_log(LOG_NOTICE,"====================================New callid: %s\n", p->callid);
/* Destroy this session after 32 secs */
sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
}
@@ -17535,6 +17619,7 @@
{
struct sip_peer *peer = (struct sip_peer *)data;
+ ast_log(LOG_NOTICE,"SCHED: sip_poke_noanswer called---\n");
peer->pokeexpire = -1;
if (peer->lastms > -1) {
ast_log(LOG_NOTICE, "Peer '%s' is now UNREACHABLE! Last qualify: %d\n", peer->name, peer->lastms);
@@ -17552,6 +17637,7 @@
peer->lastms = -1;
ast_device_state_changed("SIP/%s", peer->name);
/* Try again quickly */
+ ast_log(LOG_WARNING,"About to sched_replace peer pokeexpire(%d) for peer in sip_poke_noanswer\n", peer->pokeexpire);
peer->pokeexpire = ast_sched_replace(peer->pokeexpire, sched,
DEFAULT_FREQ_NOTOK, sip_poke_peer_s, peer);
return 0;
@@ -17568,8 +17654,11 @@
if (!peer->maxms || !peer->addr.sin_addr.s_addr) {
/* IF we have no IP, or this isn't to be monitored, return
imeediately after clearing things out */
- if (peer->pokeexpire > -1)
+ if (peer->pokeexpire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del peer pokeexpire(%d) for peer in sip_poke_peer\n", peer->pokeexpire);
ast_sched_del(sched, peer->pokeexpire);
+ }
+
peer->lastms = 0;
peer->pokeexpire = -1;
peer->call = NULL;
@@ -17602,12 +17691,19 @@
ast_string_field_set(p, tohost, ast_inet_ntoa(peer->addr.sin_addr));
/* Recalculate our side, and recalculate Call ID */
+ ast_log(LOG_NOTICE,"====================================About to build callid for %s\n", p->callid);
ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip);
build_via(p);
+ ao2_unlink(dialogs,p,"About to change the callid -- remove the old name");
build_callid_pvt(p);
-
- if (peer->pokeexpire > -1)
+ ao2_link(dialogs,p,"Linking in under new name");
+ ast_log(LOG_NOTICE,"====================================New callid: %s\n", p->callid);
+
+ if (peer->pokeexpire > -1) {
+ ast_log(LOG_WARNING,"About to sched_del peer pokeexpire(%d) for peer in sip_poke_peer\n", peer->pokeexpire);
ast_sched_del(sched, peer->pokeexpire);
+ }
+
p->relatedpeer = ref_peer(peer,"setting the relatedpeer field in the dialog");
ast_set_flag(&p->flags[0], SIP_OUTGOING);
#ifdef VOCAL_DATA_HACK
@@ -17620,6 +17716,7 @@
if (xmitres == XMIT_ERROR)
sip_poke_noanswer(peer); /* Immediately unreachable, network problems */
else {
+ ast_log(LOG_WARNING,"About to sched_replace peer pokeexpire(%d) for peer in sip_poke_peer near end\n", peer->pokeexpire);
peer->pokeexpire = ast_sched_replace(peer->pokeexpire, sched,
peer->maxms * 2, sip_poke_noanswer, peer);
}
@@ -17798,9 +17895,13 @@
if (ast_strlen_zero(p->peername) && ext)
ast_string_field_set(p, peername, ext);
/* Recalculate our side, and recalculate Call ID */
+ ast_log(LOG_NOTICE,"====================================About to build callid for %s\n", p->callid);
ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip);
build_via(p);
+ ao2_unlink(dialogs,p,"About to change the callid -- remove the old name");
build_callid_pvt(p);
+ ao2_link(dialogs,p,"Linking in under new name");
+ ast_log(LOG_NOTICE,"====================================New callid: %s\n", p->callid);
/* We have an extension to call, don't use the full contact here */
/* This to enable dialing registered peers with extension dialling,
@@ -18484,7 +18585,11 @@
} else {
/* Non-dynamic. Make sure we become that way if we're not */
if (peer->expire > -1)
+ {
+ ast_log(LOG_WARNING,"About to sched_del peer expire(%d) for peer in build_peer near end\n", peer->expire);
ast_sched_del(sched, peer->expire);
+ }
+
peer->expire = -1;
peer->host_dynamic = FALSE;
if (ast_get_ip_or_srv(&peer->addr, v->value, global_srvlookup ? "_sip._udp" : NULL)) {
@@ -19796,6 +19901,7 @@
while ((peer = ao2_iterator_next(&i, "iterate thru peers table"))) {
ms += 100;
+ ast_log(LOG_WARNING,"About to sched_replace peer pokeexpire(%d) for peer in sip_poke_all_peers\n", peer->pokeexpire);
peer->pokeexpire = ast_sched_replace(peer->pokeexpire,
sched, ms, sip_poke_peer_s, peer);
unref_peer(peer,"toss iterator peer ptr");
@@ -19816,6 +19922,7 @@
ASTOBJ_CONTAINER_TRAVERSE(®l, 1, do {
ASTOBJ_WRLOCK(iterator); /* was WRLOCK */
ms += regspacing;
+ ast_log(LOG_WARNING,"About to sched_replace reg expire(%d) for reg in sip_send_all_registers\n", iterator->expire);
iterator->expire = ast_sched_replace(iterator->expire,
sched, ms, sip_reregister, iterator);
ASTOBJ_UNLOCK(iterator);
Modified: team/murf/bug11210/main/sched.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug11210/main/sched.c?view=diff&rev=93535&r1=93534&r2=93535
==============================================================================
--- team/murf/bug11210/main/sched.c (original)
+++ team/murf/bug11210/main/sched.c Mon Dec 17 23:50:15 2007
@@ -236,6 +236,7 @@
res = tmp->id;
}
}
+ ast_log(LOG_ERROR,"SCHED: add schedule entry in %d! ID=%d\n", when, res);
#ifdef DUMP_SCHEDULER
/* Dump contents of the context while we have the lock so nothing gets screwed up by accident. */
if (option_debug)
@@ -268,6 +269,7 @@
struct sched *s;
DEBUG(ast_debug(1, "ast_sched_del()\n"));
+ ast_log(LOG_ERROR,"SCHED: delete schedule entry %d!\n", id);
ast_mutex_lock(&con->lock);
AST_LIST_TRAVERSE_SAFE_BEGIN(&con->schedq, s, list) {
@@ -292,6 +294,7 @@
#ifdef DO_CRASH
CRASH;
#endif
+ ast_log(LOG_ERROR,"Attempted to delete nonexistent schedule entry %d!\n", id);
return -1;
}
More information about the svn-commits
mailing list