diff --git a/src/mod/applications/mod_av/avformat.c b/src/mod/applications/mod_av/avformat.c index 2203eb3d0b..5da61930c1 100644 --- a/src/mod/applications/mod_av/avformat.c +++ b/src/mod/applications/mod_av/avformat.c @@ -2122,9 +2122,13 @@ static switch_status_t av_file_close(switch_file_handle_t *handle) av_file_write(handle, NULL, NULL); } - if (context->file_read_thread_running && context->file_read_thread) { + if (context->file_read_thread_running) { context->file_read_thread_running = 0; + } + + if (context->file_read_thread) { switch_thread_join(&status, context->file_read_thread); + context->file_read_thread = NULL; } if (context->eh.video_queue) { @@ -2163,6 +2167,12 @@ static switch_status_t av_file_seek(switch_file_handle_t *handle, unsigned int * if (!context->file_read_thread_running) { switch_threadattr_t *thd_attr = NULL; + if (context->file_read_thread) { + switch_status_t status; + switch_thread_join(&status, context->file_read_thread); + context->file_read_thread = NULL; + } + switch_threadattr_create(&thd_attr, handle->memory_pool); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_thread_create(&context->file_read_thread, thd_attr, file_read_thread_run, context, handle->memory_pool);