[asterisk-commits] oej: branch group/pinana-publish-1.4 r296524 - /team/group/pinana-publish-1.4...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Sun Nov 28 13:28:48 CST 2010
Author: oej
Date: Sun Nov 28 13:28:45 2010
New Revision: 296524
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=296524
Log:
Make sure we reset lists on reload
Modified:
team/group/pinana-publish-1.4/channels/chan_sip.c
Modified: team/group/pinana-publish-1.4/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/group/pinana-publish-1.4/channels/chan_sip.c?view=diff&rev=296524&r1=296523&r2=296524
==============================================================================
--- team/group/pinana-publish-1.4/channels/chan_sip.c (original)
+++ team/group/pinana-publish-1.4/channels/chan_sip.c Sun Nov 28 13:28:45 2010
@@ -1238,7 +1238,7 @@
struct sip_epa_entry *epa; /* EPA Entry for this entry */
};
-static struct ao2_container *pub_dev;
+static struct ao2_container *pub_dev = NULL;
/*!
@@ -1878,6 +1878,9 @@
/*------ Remote publish/subscribe support */
static int sip_pres_notify_update(struct sip_pvt *dialog, struct sip_request *req, int terminated, const char *termreason);
+static struct ao2_container *delete_devstate_publishers(void);
+static struct ao2_container *delete_published_devices(void);
+
/*! \brief Definition of this channel for PBX channel registration */
static const struct ast_channel_tech sip_tech = {
@@ -1947,7 +1950,7 @@
};
/*! \brief ao2 container for device state publishers */
-static struct ao2_container *devstate_publishers;
+static struct ao2_container *devstate_publishers = NULL;
/*! \brief Interface structure with callbacks used to connect to UDPTL module*/
static struct ast_udptl_protocol sip_udptl = {
@@ -19701,13 +19704,11 @@
int foundit = FALSE;
int state = AST_DEVICE_UNKNOWN;
- ast_log(LOG_DEBUG, "--- Looking for %s in subscriber list \n", data);
ASTOBJ_CONTAINER_TRAVERSE(&sip_pres_sublist, 1, do {
if (foundit) {
continue;
}
ASTOBJ_WRLOCK(iterator);
- ast_log(LOG_DEBUG, "--- Comparing iterator->devicename %s with %s\n", iterator->devicename, data);
if (!strcasecmp(iterator->devicename, data)) {
foundit = TRUE;
state = iterator->state;
@@ -19840,6 +19841,24 @@
struct ast_variable *v;
char *cat = NULL;
struct sip_publisher *publisher;
+
+ if (devstate_publishers != NULL) {
+ if (option_debug > 2) {
+ ast_log(LOG_DEBUG, "--- Deleting existing devstate publishers\n");
+ }
+ devstate_publishers = delete_devstate_publishers();
+ }
+ /* Initialise structure for state publishers */
+ devstate_publishers = ao2_container_alloc(11, publisher_hash_cb, publisher_cmp_cb);
+
+ if (pub_dev != NULL) {
+ if (option_debug > 2) {
+ ast_log(LOG_DEBUG, "--- Deleting existing published devices\n");
+ }
+ pub_dev = delete_published_devices();
+ }
+ pub_dev = ao2_container_alloc(11, pubdev_hash_cb, pubdev_cmp_cb);
+
while ( (cat = ast_category_browse(pcfg, cat)) ) {
char* type = NULL;
@@ -21181,16 +21200,42 @@
sip_reload_usage },
};
+/*! \brief Delete list of published devices */
+static struct ao2_container *delete_published_devices(void)
+{
+ struct ao2_iterator i;
+ struct sip_published_device *p;
+
+ /* Destroy all the dialogs and free their memory */
+ i = ao2_iterator_init(pub_dev, 0);
+ while ((p = ao2_iterator_next(&i))) {
+ ao2_ref(p, -1);
+ }
+ ao2_iterator_destroy(&i);
+ return NULL;
+}
+
+/*! \brief Delete devicestate publishers */
+static struct ao2_container *delete_devstate_publishers(void)
+{
+ struct ao2_iterator i;
+ struct sip_publisher *p;
+
+ /* Destroy all the dialogs and free their memory */
+ i = ao2_iterator_init(devstate_publishers, 0);
+ while ((p = ao2_iterator_next(&i))) {
+ ao2_ref(p, -1);
+ }
+ ao2_iterator_destroy(&i);
+ return NULL;
+}
+
/*! \brief PBX load module - initialization */
static int load_module(void)
{
ASTOBJ_CONTAINER_INIT(&userl); /* User object list */
ASTOBJ_CONTAINER_INIT(&peerl); /* Peer object list */
ASTOBJ_CONTAINER_INIT(®l); /* Registry object list */
-
- /* Initialise structure for state publishers */
- devstate_publishers= ao2_container_alloc(11, publisher_hash_cb, publisher_cmp_cb);
- pub_dev = ao2_container_alloc(11, pubdev_hash_cb, pubdev_cmp_cb);
if (!(sched = sched_context_create())) {
ast_log(LOG_ERROR, "Unable to create scheduler context\n");
More information about the asterisk-commits
mailing list