[asterisk-commits] rizzo: branch rizzo/astobj2 r47930 -
/team/rizzo/astobj2/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Wed Nov 22 08:50:14 MST 2006
Author: rizzo
Date: Wed Nov 22 09:50:14 2006
New Revision: 47930
URL: http://svn.digium.com/view/asterisk?view=rev&rev=47930
Log:
remove useless check on first argument to transmit_register - we know
it is non-null.
Also remove checks on arguments to scheduled events, they are correct too
unless the whole scheduler is broken.
Finally, remove ASTOBJ_REF/UNREF in the above handlers, as the
reference is already set up (elsewhere).
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=47930&r1=47929&r2=47930
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Wed Nov 22 09:50:14 2006
@@ -2122,7 +2122,7 @@
for (prev = NULL, cur = pvt->packets; cur; prev = cur, cur = cur->next) {
if (cur == pkt) {
UNLINK(cur, pvt->packets, prev);
- pkt->pvt = pvt_unref(pvt); /* release the reference pvt */
+ pkt->pvt = pvt_unref(pvt); /* release the reference to the dialog */
sip_pvt_unlock(pvt);
free(pkt);
return 0;
@@ -7370,32 +7370,28 @@
* Update registration with SIP Proxy.
* Called from the scheduler when the previous registration expires,
* so we don't have to cancel the pending event.
- * XXX The handling of sip_registry references is wrong here - the pointer is in
- * the scheduled event, so grabbing and releasing the reference here is too late.
+ * We assume the reference so the sip_registry is valid, since it
+ * is stored in the scheduled event anyways.
*/
static int sip_reregister(void *data)
{
/* if we are here, we know that we need to reregister. */
- struct sip_registry *r= ASTOBJ_REF((struct sip_registry *) data);
- struct sip_pvt *pvt;
-
- /* if we couldn't get a reference to the registry object, punt */
- if (!r)
- return 0;
-
- /* XXX why do we want to keep a dialog here ??? */
- pvt = r->register_pvt; /* XXX do we have a lock on it ? */
- if (pvt && !ast_test_flag(&pvt->flags[0], SIP_NO_HISTORY))
- append_history(pvt, "RegistryRenew", "Account: %s@%s", r->username, r->hostname);
+ struct sip_registry *r = data;
+
+ r->timeout = -1; /* old event, now gone */
+ if (r->register_pvt) {
+ ast_log(LOG_WARNING, "-- sip_reregister should not have a pvt %p (%s@%s)\n",
+ r->register_pvt, r->username, r->hostname);
+ r->register_pvt = pvt_unref(r->register_pvt);
+ }
+
/* Since registry's are only added/removed by the the monitor thread, this
may be overkill to reference/dereference at all here */
if (sipdebug)
ast_log(LOG_NOTICE, " -- Re-registration for %s@%s\n", r->username, r->hostname);
- r->timeout = -1;
transmit_register(r, NULL, NULL);
- unref_registry(r);
- return 0;
+ return 0; /* do not reschedule. */
}
/*! \brief Registration timeout, register again.
@@ -7406,16 +7402,10 @@
*/
static int sip_reg_timeout(void *data)
{
-
/* if we are here, our registration timed out, so we'll just do it over */
- struct sip_registry *r = ASTOBJ_REF((struct sip_registry *) data);
+ struct sip_registry *r = data;
struct sip_pvt *p;
int res;
-
- if (!r) {
- ast_log(LOG_WARNING, "very strange, sip_reg_timeout called without a sip_registry. Should not happen\n");
- return 0;
- }
r->timeout = -1; /* reset event reference */
ast_log(LOG_NOTICE, " -- Registration for '%s@%s' timed out, trying again (Attempt #%d)\n", r->username, r->hostname, r->regattempts);
@@ -7448,7 +7438,6 @@
res=transmit_register(r, NULL, NULL);
}
manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelDriver: SIP\r\nUsername: %s\r\nDomain: %s\r\nStatus: %s\r\n", r->username, r->hostname, regstate2str(r->regstate));
- unref_registry(r);
return 0;
}
@@ -7466,7 +7455,7 @@
int ret;
/* exit if we are already in process with this registrar ?*/
- if ( r == NULL || ((auth==NULL) && (r->regstate==REG_STATE_REGSENT || r->regstate==REG_STATE_AUTHSENT))) {
+ if (auth == NULL && (r->regstate==REG_STATE_REGSENT || r->regstate==REG_STATE_AUTHSENT)) {
ast_log(LOG_NOTICE, "Strange, trying to register %s@%s when registration already pending\n", r->username, r->hostname);
return 0;
}
More information about the asterisk-commits
mailing list