Revision
17268
Author
moy
Date
2010-04-12 15:10:25 -0500 (Mon, 12 Apr 2010)

Log Message

check for chan count before configuring signaling

Modified Paths

Diff

Modified: freeswitch/trunk/libs/freetdm/src/ftdm_io.c (17267 => 17268)


--- freeswitch/trunk/libs/freetdm/src/ftdm_io.c	2010-04-09 16:30:43 UTC (rev 17267)
+++ freeswitch/trunk/libs/freetdm/src/ftdm_io.c	2010-04-12 20:10:25 UTC (rev 17268)
@@ -3360,6 +3360,11 @@
 	ftdm_module_t *mod = (ftdm_module_t *) hashtable_search(globals.module_hash, (void *)type);
 	ftdm_status_t status = FTDM_FAIL;
 
+	if (!span->chan_count) {
+		ftdm_log(FTDM_LOG_WARNING, "Cannot configure signaling on span with no channels\n");
+		return FTDM_FAIL;
+	}
+
 	if (!mod) {
 		ftdm_load_module_assume(type);
 		if ((mod = (ftdm_module_t *) hashtable_search(globals.module_hash, (void *)type))) {
@@ -3371,10 +3376,10 @@
 		va_list ap;
 		va_start(ap, sig_cb);
 		status = mod->sig_configure(span, sig_cb, ap);
+		va_end(ap);
 		if (status == FTDM_SUCCESS && ftdm_test_flag(span, FTDM_SPAN_USE_CHAN_QUEUE)) {
 			status = ftdm_queue_create(&span->pendingchans, SPAN_PENDING_CHANS_QUEUE_SIZE);
 		}
-		va_end(ap);
 	} else {
 		ftdm_log(FTDM_LOG_ERROR, "can't find '%s'\n", type);
 		status = FTDM_FAIL;
@@ -3393,6 +3398,11 @@
 	ftdm_assert_return(sig_cb != NULL, FTDM_FAIL, "No signaling callback");
 	ftdm_assert_return(parameters != NULL, FTDM_FAIL, "No parameters");
 
+	if (!span->chan_count) {
+		ftdm_log(FTDM_LOG_WARNING, "Cannot configure signaling on span with no channels\n");
+		return FTDM_FAIL;
+	}
+
 	if (!mod) {
 		ftdm_load_module_assume(type);
 		if ((mod = (ftdm_module_t *) hashtable_search(globals.module_hash, (void *)type))) {
@@ -3407,6 +3417,9 @@
 
 	if (mod->configure_span_signaling) {
 		status = mod->configure_span_signaling(span, sig_cb, parameters);
+		if (status == FTDM_SUCCESS && ftdm_test_flag(span, FTDM_SPAN_USE_CHAN_QUEUE)) {
+			status = ftdm_queue_create(&span->pendingchans, SPAN_PENDING_CHANS_QUEUE_SIZE);
+		}
 	} else {
 		ftdm_log(FTDM_LOG_ERROR, "Module %s did not implement the signaling configuration method\n", type);
 	}