[asterisk-commits] mmichelson: branch group/CCSS_Monitor_Restructure r244495 - /team/group/CCSS_...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Feb 2 18:49:11 CST 2010
Author: mmichelson
Date: Tue Feb 2 18:49:07 2010
New Revision: 244495
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=244495
Log:
Fix that race condition...again.
Finally found the correct solution to that silly
race condition I had. Taking a food break really does
help you to recharge and think things through more clearly.
Modified:
team/group/CCSS_Monitor_Restructure/main/ccss.c
Modified: team/group/CCSS_Monitor_Restructure/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS_Monitor_Restructure/main/ccss.c?view=diff&rev=244495&r1=244494&r2=244495
==============================================================================
--- team/group/CCSS_Monitor_Restructure/main/ccss.c (original)
+++ team/group/CCSS_Monitor_Restructure/main/ccss.c Tue Feb 2 18:49:07 2010
@@ -960,7 +960,7 @@
}
if (!(generic_list->sub = ast_event_subscribe(AST_EVENT_DEVICE_STATE, generic_monitor_devstate_cb,
- "Requesting CC", (void *)generic_list->device_name, AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR,
+ "Requesting CC", NULL, AST_EVENT_IE_DEVICE, AST_EVENT_IE_PLTYPE_STR,
monitor->interface->name, AST_EVENT_IE_END))) {
cc_unref(generic_list, "Failed to subscribe to device state");
return NULL;
@@ -988,14 +988,16 @@
* time between subscribing to its device state and the time this executes.
* Not really a big deal.
*/
+ ast_free((char *) gtcd->device_name);
ast_free(gtcd);
return 0;
}
if (generic_list->current_state == new_state) {
/* The device state hasn't actually changed, so we don't really care */
+ cc_unref(generic_list, "Kill reference of generic list in devstate taskprocessor callback");
+ ast_free((char *) gtcd->device_name);
ast_free(gtcd);
- cc_unref(generic_list, "Kill reference of generic list in devstate taskprocessor callback");
return 0;
}
@@ -1010,6 +1012,7 @@
}
}
cc_unref(generic_list, "Kill reference of generic list in devstate taskprocessor callback");
+ ast_free((char *) gtcd->device_name);
ast_free(gtcd);
return 0;
}
@@ -1027,10 +1030,14 @@
return;
}
- gtcd->device_name = userdata;
+ if (!(gtcd->device_name = ast_strdup(ast_event_get_ie_str(event, AST_EVENT_IE_DEVICE)))) {
+ ast_free(gtcd);
+ return;
+ }
gtcd->new_state = ast_event_get_ie_uint(event, AST_EVENT_IE_STATE);
if (ast_taskprocessor_push(cc_core_taskprocessor, generic_monitor_devstate_tp_cb, gtcd)) {
+ ast_free((char *)gtcd->device_name);
ast_free(gtcd);
}
}
More information about the asterisk-commits
mailing list