]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Memory leak at mod_local_stream (MODFORM-36)
authorMichael Jerris <mike@jerris.com>
Wed, 11 Nov 2009 16:59:25 +0000 (16:59 +0000)
committerMichael Jerris <mike@jerris.com>
Wed, 11 Nov 2009 16:59:25 +0000 (16:59 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15431 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/formats/mod_local_stream/mod_local_stream.c

index b9a99901a4b40e6c05d0f60bf5e4b1712b590063..0ee8258066c66c8d67bb080c1fcb03813c87baa4 100644 (file)
@@ -119,6 +119,7 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void
        switch_byte_t *dist_buf;
        switch_size_t used;
        int skip = 0;
+       switch_memory_pool_t *temp_pool = NULL;
 
        switch_mutex_lock(globals.mutex);
        THREADS++;
@@ -146,8 +147,17 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void
 
        while (RUNNING && !source->stopped) {
                const char *fname;
+
+               if (temp_pool) {
+                       switch_core_destroy_memory_pool(&temp_pool);
+               }
+
+               if (switch_core_new_memory_pool(&temp_pool) != SWITCH_STATUS_SUCCESS) {
+                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error creating pool");
+                       goto done;
+               }
                
-               if (switch_dir_open(&source->dir_handle, source->location, source->pool) != SWITCH_STATUS_SUCCESS) {
+               if (switch_dir_open(&source->dir_handle, source->location, temp_pool) != SWITCH_STATUS_SUCCESS) {
                        switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Can't open directory: %s\n", source->location);
                        goto done;
                }
@@ -202,7 +212,7 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void
                                continue;
                        }
                        
-                       if (switch_core_timer_init(&timer, source->timer_name, source->interval, source->samples, source->pool) != SWITCH_STATUS_SUCCESS) {
+                       if (switch_core_timer_init(&timer, source->timer_name, source->interval, source->samples, temp_pool) != SWITCH_STATUS_SUCCESS) {
                                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Can't start timer.\n");
                                switch_dir_close(source->dir_handle);
                                source->dir_handle = NULL;
@@ -336,6 +346,10 @@ static void *SWITCH_THREAD_FUNC read_stream_thread(switch_thread_t *thread, void
                close(fd);
        }
 
+       if (temp_pool) {
+               switch_core_destroy_memory_pool(&temp_pool);
+       }
+
        switch_core_destroy_memory_pool(&source->pool);
 
        switch_mutex_lock(globals.mutex);