[svn-commits] russell: trunk r90146 - in /trunk: ./ funcs/ include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Wed Nov 28 18:28:11 CST 2007


Author: russell
Date: Wed Nov 28 18:28:10 2007
New Revision: 90146

URL: http://svn.digium.com/view/asterisk?view=rev&rev=90146
Log:
Merged revisions 90145 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r90145 | russell | 2007-11-28 18:20:34 -0600 (Wed, 28 Nov 2007) | 5 lines

This set of changes is to make some callerID handling thread-safe.
The ast_set_callerid() function needed to lock the channel.  Also, the handlers
for the CALLERID() dialplan function needed to lock the channel when reading
or writing callerid values directly on the channel structure.

........

Modified:
    trunk/   (props changed)
    trunk/funcs/func_callerid.c
    trunk/include/asterisk/channel.h
    trunk/main/channel.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Modified: trunk/funcs/func_callerid.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_callerid.c?view=diff&rev=90146&r1=90145&r2=90146
==============================================================================
--- trunk/funcs/func_callerid.c (original)
+++ trunk/funcs/func_callerid.c Wed Nov 28 18:28:10 2007
@@ -72,6 +72,8 @@
 			ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
 		}
 	} else {
+		ast_channel_lock(chan);
+
 		if (!strncasecmp("all", data, 3)) {
 			snprintf(buf, len, "\"%s\" <%s>",
 				 S_OR(chan->cid.cid_name, ""),
@@ -105,6 +107,8 @@
 		} else {
 			ast_log(LOG_ERROR, "Unknown callerid data type '%s'.\n", data);
 		}
+
+		ast_channel_unlock(chan);
 	}
 
 	return 0;
@@ -133,15 +137,17 @@
 		} else
 			ast_set_callerid(chan, NULL, NULL, value);
 	} else if (!strncasecmp("dnid", data, 4)) {
-		/* do we need to lock chan here? */
+		ast_channel_lock(chan);
 		if (chan->cid.cid_dnid)
 			ast_free(chan->cid.cid_dnid);
 		chan->cid.cid_dnid = ast_strdup(value);
+		ast_channel_unlock(chan);
 	} else if (!strncasecmp("rdnis", data, 5)) {
-		/* do we need to lock chan here? */
+		ast_channel_lock(chan);
 		if (chan->cid.cid_rdnis)
 			ast_free(chan->cid.cid_rdnis);
 		chan->cid.cid_rdnis = ast_strdup(value);
+		ast_channel_unlock(chan);
 	} else if (!strncasecmp("pres", data, 4)) {
 		int i;
 		char *s, *val;

Modified: trunk/include/asterisk/channel.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/channel.h?view=diff&rev=90146&r1=90145&r2=90146
==============================================================================
--- trunk/include/asterisk/channel.h (original)
+++ trunk/include/asterisk/channel.h Wed Nov 28 18:28:10 2007
@@ -1309,7 +1309,11 @@
 /*! Deactivate an active generator */
 void ast_deactivate_generator(struct ast_channel *chan);
 
-/*! Set caller ID number, name and ANI */
+/*!
+ * \brief Set caller ID number, name and ANI
+ *
+ * \note The channel does not need to be locked before calling this function.
+ */
 void ast_set_callerid(struct ast_channel *chan, const char *cid_num, const char *cid_name, const char *cid_ani);
 
 /*! Set the file descriptor on the channel */

Modified: trunk/main/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/main/channel.c?view=diff&rev=90146&r1=90145&r2=90146
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Wed Nov 28 18:28:10 2007
@@ -3758,6 +3758,8 @@
 
 void ast_set_callerid(struct ast_channel *chan, const char *cid_num, const char *cid_name, const char *cid_ani)
 {
+	ast_channel_lock(chan);
+
 	if (cid_num) {
 		if (chan->cid.cid_num)
 			ast_free(chan->cid.cid_num);
@@ -3788,6 +3790,8 @@
 				chan->cid.cid_pres,
 				ast_describe_caller_presentation(chan->cid.cid_pres)
 				);
+	
+	ast_channel_unlock(chan);
 }
 
 int ast_setstate(struct ast_channel *chan, enum ast_channel_state state)




More information about the svn-commits mailing list