]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
a day at the races
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 9 Jul 2008 21:19:18 +0000 (21:19 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 9 Jul 2008 21:19:18 +0000 (21:19 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@8967 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch_ivr_async.c

index 16f41a257669dcfcbd89ee01dd7afba27ddf2a63..db0917ee2b03a663c75f6d3d38d7a23b7f8db627 100644 (file)
@@ -1490,6 +1490,7 @@ struct speech_thread_handle {
        switch_mutex_t *mutex;
        switch_thread_cond_t *cond;
        switch_memory_pool_t *pool;
+       int ready;
 };
 
 static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj)
@@ -1505,6 +1506,8 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
        switch_core_session_read_lock(sth->session);
        switch_mutex_lock(sth->mutex);
 
+       sth->ready = 1;
+
        while (switch_channel_ready(channel) && !switch_test_flag(sth->ah, SWITCH_ASR_FLAG_CLOSED)) {
                char *xmlstr = NULL;
 
@@ -1619,9 +1622,11 @@ static switch_bool_t speech_callback(switch_media_bug_t *bug, void *user_data, s
                break;
        case SWITCH_ABC_TYPE_CLOSE:{
                        switch_core_asr_close(sth->ah, &flags);
-                       switch_mutex_lock(sth->mutex);
-                       switch_thread_cond_signal(sth->cond);
-                       switch_mutex_unlock(sth->mutex);
+                       if (sth->mutex && sth->cond && sth->ready) {
+                               switch_mutex_lock(sth->mutex);
+                               switch_thread_cond_signal(sth->cond);
+                               switch_mutex_unlock(sth->mutex);
+                       }
                }
                break;
        case SWITCH_ABC_TYPE_READ: