[asterisk-commits] rizzo: branch rizzo/astobj2 r47839 -
/team/rizzo/astobj2/channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sun Nov 19 03:02:53 MST 2006
Author: rizzo
Date: Sun Nov 19 04:02:52 2006
New Revision: 47839
URL: http://svn.digium.com/view/asterisk?view=rev&rev=47839
Log:
use sip_destroy() and not __sip_destroy() when shutting down the module.
Apart from lock/unlock the list on each operation (but unloading the
module is such a rare operation that we do not care)
we lose no efficiency because we always delete the first item
(so, the loop is still O(N) and not O(N^2)), and
gain in readability because reduce the number of places where the "non standard"
destructor __sip_destroy() is invoked.
I suggest this for trunk as well.
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=47839&r1=47838&r2=47839
==============================================================================
--- team/rizzo/astobj2/channels/chan_sip.c (original)
+++ team/rizzo/astobj2/channels/chan_sip.c Sun Nov 19 04:02:52 2006
@@ -17595,7 +17595,7 @@
/*! \brief PBX unload module API */
static int unload_module(void)
{
- struct sip_pvt *p, *pl;
+ struct sip_pvt *p;
/* First, take us out of the channel type list */
ast_channel_unregister(&sip_tech);
@@ -17625,6 +17625,7 @@
#ifdef USE_AO2
{
+ /* should do this with a callback */
ao2_iterator i = ao2_iterator_init(dialogs, 0);
while ((p = ao2_iterator_next(&i))) {
if (p->owner)
@@ -17652,20 +17653,12 @@
ast_mutex_unlock(&monlock);
#ifdef USE_AO2
- pl = NULL; /* XXX silence compiler */
ao2_ref(dialogs, -1);
dialogs = NULL;
#else
- dialoglist_lock();
/* Destroy all the dialogs and free their memory */
- p = dialoglist;
- while (p) {
- pl = p;
- p = p->next;
- __sip_destroy(pl);
- }
- dialoglist = NULL;
- dialoglist_unlock();
+ while (dialoglist)
+ sip_destroy(dialoglist);
#endif
/* Free memory for local network address mask */
ast_free_ha(localaddr);
More information about the asterisk-commits
mailing list