[asterisk-commits] oej: branch group/pinana-publish-1.4 r296518 - /team/group/pinana-publish-1.4...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sun Nov 28 11:13:23 CST 2010


Author: oej
Date: Sun Nov 28 11:13:20 2010
New Revision: 296518

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=296518
Log:
Slowly learning ao2objects

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=296518&r1=296517&r2=296518
==============================================================================
--- team/group/pinana-publish-1.4/channels/chan_sip.c (original)
+++ team/group/pinana-publish-1.4/channels/chan_sip.c Sun Nov 28 11:13:20 2010
@@ -9854,6 +9854,13 @@
 	return 0;
 }
 
+/*! \brief Published_device destructor */
+static void pubdev_destructor(void *data)
+{
+	struct sip_published_device *device = data;
+	ao2_unlink(pub_dev, device);
+}
+
 /*! \brief Generate a PUBLISH request for one server */
 static int sip_devicestate_publish(struct sip_publisher *pres_server, struct statechange *sc)
 {
@@ -9885,12 +9892,13 @@
 	/* At this point we have a device state change to publish to one presence server. */
 	if (!found) {
 		ast_log(LOG_DEBUG, "*** Creating new publish device for %s\n", sc->dev);
-		device = ast_calloc(1, sizeof(*device));
+		device = ao2_alloc(sizeof(struct sip_published_device), pubdev_destructor);
 		ast_copy_string(device->name, sc->dev, sizeof(device->name));
 		ast_copy_string(device->pubname, pres_server->name, sizeof(device->pubname));
 		/* Initiate stuff */
 		ao2_link(pub_dev, device);
 		/* Do stuff here */
+		ast_log(LOG_DEBUG, "*** Created new publish device for %s\n", sc->dev);
 	}
 	return 0;
 }
@@ -19662,11 +19670,19 @@
 	return publisher;
 }
 
+/*! \brief Compute unique hash for object
+
+As the device name can have one entry per presence server, we need to hash on 
+both device name and presence server name to get a unique hash
+*/
 static int pubdev_hash_cb(const void *obj, const int flags)
 {
 	const struct sip_published_device *device = obj;
+	char buf[SIPBUFSIZE];
+	snprintf(buf, sizeof(buf), "%s:%s", device->name, device->pubname);
+
 	ast_log(LOG_DEBUG, "--- XXX Here I am \n");
-	return ast_str_case_hash(device->name);
+	return ast_str_case_hash(buf);
 }
 
 static int pubdev_cmp_cb(void *obj, void *arg, int flags)




More information about the asterisk-commits mailing list