[asterisk-commits] mmichelson: branch group/CCSS_Monitor_Restructure r244330 - /team/group/CCSS_...
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Feb 2 12:53:05 CST 2010
Author: mmichelson
Date: Tue Feb 2 12:53:03 2010
New Revision: 244330
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=244330
Log:
Fix a bunch of refcount problems with generic monitors.
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=244330&r1=244329&r2=244330
==============================================================================
--- team/group/CCSS_Monitor_Restructure/main/ccss.c (original)
+++ team/group/CCSS_Monitor_Restructure/main/ccss.c Tue Feb 2 12:53:03 2010
@@ -25,6 +25,7 @@
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+#define REF_DEBUG 1
#include "asterisk/astobj2.h"
#include "asterisk/strings.h"
#include "asterisk/ccss.h"
@@ -989,12 +990,14 @@
* time between subscribing to its device state and the time this executes.
* Not really a big deal.
*/
+ cc_unref(gtcd->monitor, "Can't find generic list. Unref monitor in generic_monitor_devstate_tp_cb");
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(gtcd->monitor, "State hasn't changed. Done with monitor in generic_monitor_devstate_tp_cb");
ast_free(gtcd);
cc_unref(generic_list, "Kill reference of generic list in devstate taskprocessor callback");
return 0;
@@ -1011,6 +1014,7 @@
}
}
cc_unref(generic_list, "Kill reference of generic list in devstate taskprocessor callback");
+ cc_unref(gtcd->monitor, "Done with monitor ref in generic_monitor_devstate_tp_cb");
ast_free(gtcd);
return 0;
}
@@ -1029,10 +1033,11 @@
return;
}
- gtcd->monitor = monitor;
+ gtcd->monitor = cc_ref(monitor, "Getting monitor reference for taskprocessor callback");
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)) {
+ cc_unref(gtcd->monitor, "Couldn't push taskprocessor callback. unref monitor");
ast_free(gtcd);
}
}
@@ -1118,6 +1123,7 @@
* take any further actions
*/
if (state != AST_DEVICE_NOT_INUSE && state != AST_DEVICE_UNKNOWN) {
+ cc_unref(generic_list, "Device is in use. Nothing to do. Unref generic list.");
return 0;
}
@@ -1168,6 +1174,7 @@
break;
}
}
+ cc_unref(generic_list, "Done with generic list in cc_generic_monitor_unsuspend");
return 0;
}
@@ -2097,7 +2104,7 @@
/* We can't unsubscribe from device state events here because it causes a deadlock */
if (ast_taskprocessor_push(cc_core_taskprocessor, generic_agent_devstate_unsubscribe,
- cc_ref(agent, "ref agent for device state unsubscription"))) {
+ cc_ref(agent, "ref agent for device state unsubscription"))) {
cc_unref(agent, "Unref agent unsubscribing from devstate failed");
}
ast_str_set(&str, 0, "%s is no longer busy\n", agent->interface);
@@ -2642,7 +2649,7 @@
if (!new_data) {
return NULL;
}
- new_data->interface_tree = cc_ref(old_data->interface_tree, "Bump refcount of interface tree for recall");
+ new_data->interface_tree = cc_ref(old_data->interface_tree, "Bump refcount of interface tree for recall datastore duplicate");
new_data->core_id = old_data->core_id;
new_data->nested = 1;
return new_data;
@@ -2683,7 +2690,7 @@
}
recall_data->interface_tree = cc_ref(core_instance->monitors,
- "Bump refcount for interface tree for agent");
+ "Bump refcount for interface tree for recall datastore");
recall_data->core_id = core_id;
recall_datastore->data = recall_data;
recall_datastore->inheritance = DATASTORE_INHERIT_FOREVER;
More information about the asterisk-commits
mailing list