Revision
17428
Author
chris
Date
2010-04-28 08:46:49 -0500 (Wed, 28 Apr 2010)

Log Message

Do not allow timeout when opening MRCP session

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c (17427 => 17428)


--- freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c	2010-04-27 22:26:39 UTC (rev 17427)
+++ freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c	2010-04-28 13:46:49 UTC (rev 17428)
@@ -263,8 +263,7 @@
  * SPEECH_CHANNEL : speech functions common to recognizer and synthesizer
  */
 
-/* how long to wait for UniMRCP to process requests */
-#define SPEECH_CHANNEL_TIMEOUT_USEC (30 * 1000000)
+#define SPEECH_CHANNEL_TIMEOUT_USEC (5 * 1000000)
 
 /**
  * Type of MRCP channel
@@ -836,7 +835,7 @@
 				while (schannel->state != SPEECH_CHANNEL_CLOSED) {
 					if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT && !warned) {
 						warned = 1;
-						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) MRCP session has not terminated after %d  ms\n", schannel->name, SPEECH_CHANNEL_TIMEOUT_USEC / (1000));
+						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) MRCP session has not terminated after %d ms\n", schannel->name, SPEECH_CHANNEL_TIMEOUT_USEC / (1000));
 					}
 				}
 			}
@@ -907,6 +906,7 @@
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
 	mpf_termination_t *termination = NULL;
 	mrcp_resource_type_e resource_type;
+	int warned = 0;
 
 	switch_mutex_lock(schannel->mutex);
 
@@ -954,9 +954,11 @@
 	}
 
 	/* wait for channel to be ready */
+	warned = 0;
 	while (schannel->state == SPEECH_CHANNEL_CLOSED) {
-		if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT) {
-			break;
+		if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT && !warned) {
+			warned = 1;
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) MRCP session has not opened after %d ms\n", schannel->name, SPEECH_CHANNEL_TIMEOUT_USEC / (1000));
 		}
 	}
 	if (schannel->state == SPEECH_CHANNEL_READY) {
@@ -967,9 +969,11 @@
 		status = SWITCH_STATUS_FALSE;
 	} else if (schannel->state == SPEECH_CHANNEL_ERROR) {
 		/* Wait for session to be cleaned up */
+		warned = 0;
 		while (schannel->state == SPEECH_CHANNEL_ERROR) {
-			if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT) {
-				break;
+			if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT && !warned) {
+				warned = 1;
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) MRCP session has not cleaned up after %d ms\n", schannel->name, SPEECH_CHANNEL_TIMEOUT_USEC / (1000));
 			}
 		}
 		if (schannel->state != SPEECH_CHANNEL_CLOSED) {
@@ -1046,9 +1050,10 @@
 		status = SWITCH_STATUS_FALSE;
 		goto done;
 	}
-	/* wait for IN PROGRESS */
+	/* wait for IN-PROGRESS */
 	while (schannel->state == SPEECH_CHANNEL_READY) {
 		if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) Timed out waiting for SPEAK IN-PROGRESS\n", schannel->name);
 			break;
 		}
 	}
@@ -1297,7 +1302,7 @@
 		}
 
 		if (schannel->state == SPEECH_CHANNEL_PROCESSING) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Timed out waiting for session to close.  Continuing.\n", schannel->name);
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Timed out waiting for STOP to COMPLETE.  Continuing.\n", schannel->name);
 			schannel->state = SPEECH_CHANNEL_ERROR;
 			status = SWITCH_STATUS_FALSE;
 			goto done;
@@ -2134,9 +2139,10 @@
 		status = SWITCH_STATUS_FALSE;
 		goto done;
 	}
-	/* wait for IN PROGRESS */
+	/* wait for IN-PROGRESS */
 	while (schannel->state == SPEECH_CHANNEL_READY) {
 		if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) Timed out waiting for RECOGNIZE IN-PROGRESS\n", schannel->name);
 			break;
 		}
 	}
@@ -2214,6 +2220,7 @@
 		}
 		while (schannel->state == SPEECH_CHANNEL_PROCESSING) {
 			if (switch_thread_cond_timedwait(schannel->cond, schannel->mutex, SPEECH_CHANNEL_TIMEOUT_USEC) == SWITCH_STATUS_TIMEOUT) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "(%s) Timed out waiting for DEFINE-GRAMMAR to COMPLETE\n", schannel->name);
 				break;
 			}
 		}