[asterisk-commits] russell: trunk r101416 - in /trunk: ./ channels/chan_agent.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Jan 31 13:13:20 CST 2008


Author: russell
Date: Thu Jan 31 13:13:20 2008
New Revision: 101416

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

........
r101413 | russell | 2008-01-31 13:04:52 -0600 (Thu, 31 Jan 2008) | 2 lines

Add missing locking to the find_agent() function.

........
r101414 | russell | 2008-01-31 13:07:46 -0600 (Thu, 31 Jan 2008) | 3 lines

Move the locking from find_agent() into the agent dialplan function handler to
ensure that the agent doesn't disappear while we're looking at it.

........

Modified:
    trunk/   (props changed)
    trunk/channels/chan_agent.c

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

Modified: trunk/channels/chan_agent.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_agent.c?view=diff&rev=101416&r1=101415&r2=101416
==============================================================================
--- trunk/channels/chan_agent.c (original)
+++ trunk/channels/chan_agent.c Thu Jan 31 13:13:20 2008
@@ -2242,6 +2242,9 @@
 	return res;
 }
 
+/*!
+ * \note This function expects the agent list to be locked
+ */
 static struct agent_pvt *find_agent(char *agentid)
 {
 	struct agent_pvt *cur;
@@ -2277,7 +2280,10 @@
 	if (!args.item)
 		args.item = "status";
 
+	AST_LIST_LOCK(&agents);
+
 	if (!(agent = find_agent(args.agentid))) {
+		AST_LIST_UNLOCK(&agents);
 		ast_log(LOG_WARNING, "Agent '%s' not found!\n", args.agentid);
 		return -1;
 	}
@@ -2303,6 +2309,8 @@
 	} else if (!strcasecmp(args.item, "exten"))
 		ast_copy_string(buf, agent->loginchan, len);	
 
+	AST_LIST_UNLOCK(&agents);
+
 	return 0;
 }
 




More information about the asterisk-commits mailing list