From: Anthony Minessale Date: Fri, 5 Sep 2008 21:37:33 +0000 (+0000) Subject: fix unload X-Git-Tag: v1.0.2~1283 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f4f1d1db34c61fc348363ba412f977def1ae148;p=thirdparty%2Ffreeswitch.git fix unload git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9471 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- diff --git a/src/mod/formats/mod_local_stream/mod_local_stream.c b/src/mod/formats/mod_local_stream/mod_local_stream.c index e31774146b..d22e60c149 100644 --- a/src/mod/formats/mod_local_stream/mod_local_stream.c +++ b/src/mod/formats/mod_local_stream/mod_local_stream.c @@ -34,8 +34,9 @@ #define DEFAULT_PREBUFFER_SIZE 1024 * 16 SWITCH_MODULE_LOAD_FUNCTION(mod_local_stream_load); -SWITCH_MODULE_DEFINITION(mod_local_stream, mod_local_stream_load, NULL, NULL); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_local_stream_shutdown); +SWITCH_MODULE_DEFINITION(mod_local_stream, mod_local_stream_load, mod_local_stream_shutdown, NULL); + struct local_stream_source; @@ -45,6 +46,7 @@ static struct { } globals; static int RUNNING = 1; +static int THREADS = 0; struct local_stream_context { struct local_stream_source *source; @@ -107,6 +109,10 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void switch_size_t used; int skip = 0; + switch_mutex_lock(globals.mutex); + THREADS++; + switch_mutex_unlock(globals.mutex); + if (!source->prebuf) { source->prebuf = DEFAULT_PREBUFFER_SIZE; } @@ -257,6 +263,10 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void switch_core_destroy_memory_pool(&source->pool); + switch_mutex_lock(globals.mutex); + THREADS--; + switch_mutex_unlock(globals.mutex); + return NULL; } @@ -507,7 +517,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_local_stream_load) SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_local_stream_shutdown) { RUNNING = 0; - switch_yield(500000); + switch_event_unbind_callback(event_handler); + + while(THREADS > 0) { + switch_yield(100000); + } + switch_core_hash_destroy(&globals.source_hash); return SWITCH_STATUS_SUCCESS; }