[asterisk-commits] mmichelson: branch group/CCSS_Monitor_Restructure r241365 - in /team/group/CC...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Jan 19 16:58:01 CST 2010


Author: mmichelson
Date: Tue Jan 19 16:57:58 2010
New Revision: 241365

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=241365
Log:
Change some more callbacks to the new versions.


Modified:
    team/group/CCSS_Monitor_Restructure/include/asterisk/ccss.h
    team/group/CCSS_Monitor_Restructure/main/ccss.c

Modified: team/group/CCSS_Monitor_Restructure/include/asterisk/ccss.h
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS_Monitor_Restructure/include/asterisk/ccss.h?view=diff&rev=241365&r1=241364&r2=241365
==============================================================================
--- team/group/CCSS_Monitor_Restructure/include/asterisk/ccss.h (original)
+++ team/group/CCSS_Monitor_Restructure/include/asterisk/ccss.h Tue Jan 19 16:57:58 2010
@@ -576,6 +576,7 @@
 	 * \retval -1 on failure.
 	 */
 	int (*suspend)(struct ast_cc_monitor *monitor, const int core_id);
+	int (*suspend2)(struct cc_monitor *monitor);
 	/*!
 	 * \brief Status response to an ast_cc_monitor_status_request().
 	 *
@@ -606,6 +607,7 @@
 	 * \retval -1 on failure.
 	 */
 	int (*unsuspend)(struct ast_cc_monitor *monitor, const int core_id);
+	int (*unsuspend2)(struct cc_monitor *monitor);
 	/*!
 	 * \brief Cancel the running available timer.
 	 *
@@ -624,6 +626,7 @@
 	 * \retval -1 on failure.
 	 */
 	int (*cancel_available_timer)(struct ast_cc_monitor *monitor, const int core_id, int *sched_id);
+	int (*cancel_available_timer2)(struct cc_monitor *monitor, int *sched_id);
 	/*!
 	 * \brief Destroy private data on the monitor.
 	 *

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=241365&r1=241364&r2=241365
==============================================================================
--- team/group/CCSS_Monitor_Restructure/main/ccss.c (original)
+++ team/group/CCSS_Monitor_Restructure/main/ccss.c Tue Jan 19 16:57:58 2010
@@ -2623,6 +2623,25 @@
 	return 0;
 }
 
+static void unsuspend(struct cc_core_instance *core_instance)
+{
+	struct cc_monitor *monitor_iter;
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_BEGIN(core_instance->monitors, monitor_iter, next) {
+		if (monitor_iter->interface->monitor_class == AST_CC_DEVICE_MONITOR) {
+			if (monitor_iter->callbacks->unsuspend2(monitor_iter)) {
+				AST_DLLIST_REMOVE_CURRENT(next);
+			}
+		} else if (!has_children(monitor_iter)) {
+			AST_DLLIST_REMOVE_CURRENT(next);
+		}
+	}
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_END;
+
+	if (AST_DLLIST_EMPTY(core_instance->monitors)) {
+		ast_cc_failed(core_instance->core_id, "All device monitors failed to unsuspend CC");
+	}
+}
+
 static int cc_active(struct cc_core_instance *core_instance, struct cc_state_change_args *args, enum cc_state previous_state)
 {
 	/* Either
@@ -2639,6 +2658,7 @@
 			"CoreID: %d\r\n"
 			"Caller: %s\r\n",
 			core_instance->core_id, core_instance->agent->interface);
+		unsuspend(core_instance);
 		core_instance->monitor->callbacks->unsuspend(core_instance->monitor, core_instance->core_id);
 	}
 	/* Not possible for previous_state to be anything else due to the is_state_change_valid check at the beginning */
@@ -2649,6 +2669,25 @@
 {
 	core_instance->agent->callbacks->callee_available(core_instance->agent);
 	return 0;
+}
+
+static void suspend(struct cc_core_instance *core_instance)
+{
+	struct cc_monitor *monitor_iter;
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_BEGIN(core_instance->monitors, monitor_iter, next) {
+		if (monitor_iter->interface->monitor_class == AST_CC_DEVICE_MONITOR) {
+			if (monitor_iter->callbacks->suspend2(monitor_iter)) {
+				AST_DLLIST_REMOVE_CURRENT(next);
+			}
+		} else if (!has_children(monitor_iter)) {
+			AST_DLLIST_REMOVE_CURRENT(next);
+		}
+	}
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_END;
+
+	if (AST_DLLIST_EMPTY(core_instance->monitors)) {
+		ast_cc_failed(core_instance->core_id, "All device monitors failed to suspend CC");
+	}
 }
 
 static int cc_caller_busy(struct cc_core_instance *core_instance, struct cc_state_change_args *args, enum cc_state previous_state)
@@ -2656,7 +2695,7 @@
 	/* Callee was available, but caller was busy, call agent's begin_monitoring callback
 	 * and call monitor's suspend callback.
 	 */
-	core_instance->monitor->callbacks->suspend(core_instance->monitor, core_instance->core_id);
+	suspend(core_instance);
 	core_instance->agent->callbacks->start_monitoring(core_instance->agent);
 	manager_event(EVENT_FLAG_CC, "CCCallerStartMonitoring",
 		"CoreID: %d\r\n"
@@ -2665,11 +2704,30 @@
 	return 0;
 }
 
+static void cancel_available_timer(struct cc_core_instance *core_instance)
+{
+	struct cc_monitor *monitor_iter;
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_BEGIN(core_instance->monitors, monitor_iter, next) {
+		if (monitor_iter->interface->monitor_class == AST_CC_DEVICE_MONITOR) {
+			if (monitor_iter->callbacks->cancel_available_timer2(monitor_iter, &monitor_iter->available_timer_id)) {
+				AST_DLLIST_REMOVE_CURRENT(next);
+			}
+		} else if (!has_children(monitor_iter)) {
+			AST_DLLIST_REMOVE_CURRENT(next);
+		}
+	}
+	AST_DLLIST_TRAVERSE_BACKWARDS_SAFE_END;
+
+	if (AST_DLLIST_EMPTY(core_instance->monitors)) {
+		ast_cc_failed(core_instance->core_id, "All device monitors failed to cancel their available timers");
+	}
+}
+
 static int cc_recalling(struct cc_core_instance *core_instance, struct cc_state_change_args *args, enum cc_state previous_state)
 {
 	/* Both caller and callee are available, call agent's recall callback
 	 */
-	core_instance->monitor->callbacks->cancel_available_timer(core_instance->monitor, core_instance->core_id, NULL);
+	cancel_available_timer(core_instance);
 	manager_event(EVENT_FLAG_CC, "CCCallerRecalling",
 		"CoreID: %d\r\n"
 		"Caller: %s\r\n",




More information about the asterisk-commits mailing list