Revision
16855
Author
crienzo
Date
2010-03-01 18:01:52 -0600 (Mon, 01 Mar 2010)

Log Message

try to prevent core dump- still don't completely understand the cause

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c (16854 => 16855)


--- freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c	2010-03-01 20:04:12 UTC (rev 16854)
+++ freeswitch/trunk/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c	2010-03-02 00:01:52 UTC (rev 16855)
@@ -844,9 +844,11 @@
 				break;
 			}
 		}
-		audio_queue_destroy(schannel->audio_queue);
 		if (schannel->state != SPEECH_CHANNEL_CLOSED) {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "(%s) Failed to destroy channel.  Continuing\n", schannel->name);
+		} else {
+			audio_queue_destroy(schannel->audio_queue);
+			schannel->audio_queue = NULL;
 		}
 	}
 	if (schannel->params) {
@@ -1370,12 +1372,16 @@
  */
 static switch_status_t speech_channel_write(speech_channel_t *schannel, void *data, switch_size_t *len)
 {
-	audio_queue_t *queue = schannel->audio_queue;
+	if (!schannel || !schannel->mutex || !schannel->audio_queue) {
+		return SWITCH_STATUS_FALSE;
+	}
+
 	switch_mutex_lock(schannel->mutex);
 	if (schannel->state == SPEECH_CHANNEL_PROCESSING) {
-		audio_queue_write(queue, data, len);
+		audio_queue_write(schannel->audio_queue, data, len);
 	}
 	switch_mutex_unlock(schannel->mutex);
+
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -1391,14 +1397,19 @@
 static switch_status_t speech_channel_read(speech_channel_t *schannel, void *data, switch_size_t *len, int block)
 {
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
-	audio_queue_t *queue = schannel->audio_queue;
+
+	if (!schannel || !schannel->mutex || !schannel->audio_queue) {
+		return SWITCH_STATUS_FALSE;
+	}
+
 	switch_mutex_lock(schannel->mutex);
 	if (schannel->state == SPEECH_CHANNEL_PROCESSING) {
-		audio_queue_read(queue, data, len, block);
+		audio_queue_read(schannel->audio_queue, data, len, block);
 	} else {
 		status = SWITCH_STATUS_BREAK;
 	}
 	switch_mutex_unlock(schannel->mutex);
+
 	return status;
 }
 
@@ -1704,7 +1715,6 @@
 			switch_event_fire(&event);
 		}
 	}
-
 	speech_channel_set_state(schannel, SPEECH_CHANNEL_CLOSED);
 
 	return TRUE;