[asterisk-commits] mmichelson: branch group/CCSS r247735 - /team/group/CCSS/main/ccss.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Feb 18 14:55:44 CST 2010
Author: mmichelson
Date: Thu Feb 18 14:55:41 2010
New Revision: 247735
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=247735
Log:
Add some locking where it should be done.
Modified:
team/group/CCSS/main/ccss.c
Modified: team/group/CCSS/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=247735&r1=247734&r2=247735
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Thu Feb 18 14:55:41 2010
@@ -1547,31 +1547,45 @@
struct ast_cc_monitor *monitor;
struct extension_monitor_pvt *extension_pvt;
struct extension_child_dialstring *child_dialstring;
-
+ struct ast_cc_interface_tree *interface_tree;
+ int id;
+
+ ast_channel_lock(incoming);
if (!(cc_datastore = ast_channel_datastore_find(incoming, &dialed_cc_interfaces_info, NULL))) {
+ ast_channel_unlock(incoming);
return;
}
cc_interfaces = cc_datastore->data;
- AST_DLLIST_TRAVERSE(cc_interfaces->interface_tree, monitor, next) {
- if (monitor->id == cc_interfaces->dial_parent_id) {
- ast_log(LOG_NOTICE, "Found monitor named %s\n", monitor->interface->device_name);
+ interface_tree = cc_ref(cc_interfaces->interface_tree, "Gaining reference to tree so we can unlock the channel");
+ id = cc_interfaces->dial_parent_id;
+ ast_channel_unlock(incoming);
+
+ AST_DLLIST_LOCK(interface_tree);
+ AST_DLLIST_TRAVERSE(interface_tree, monitor, next) {
+ if (monitor->id == id) {
break;
}
}
if (!monitor) {
+ AST_DLLIST_UNLOCK(interface_tree);
+ cc_unref(interface_tree, "Done with interface tree");
return;
}
extension_pvt = monitor->private_data;
if (!(child_dialstring = ast_calloc(1, sizeof(*child_dialstring)))) {
+ AST_DLLIST_UNLOCK(interface_tree);
+ cc_unref(interface_tree, "Done with interface tree");
return;
}
ast_copy_string(child_dialstring->original_dialstring, dialstring, sizeof(child_dialstring->original_dialstring));
ast_copy_string(child_dialstring->device_name, device_name, sizeof(child_dialstring->device_name));
child_dialstring->is_valid = 1;
AST_LIST_INSERT_TAIL(&extension_pvt->child_dialstrings, child_dialstring, next);
+ AST_DLLIST_UNLOCK(interface_tree);
+ cc_unref(interface_tree, "Done with interface tree");
}
static void cc_extension_monitor_change_is_valid(struct cc_core_instance *core_instance, unsigned int parent_id, const char * const device_name, int is_valid)
More information about the asterisk-commits
mailing list