[pulseaudio-commits] src/modules

Arun Raghavan arun at kemper.freedesktop.org
Tue May 10 12:15:19 UTC 2016


 src/modules/module-filter-apply.c |   25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

New commits:
commit a19e1e5382ca9c193d9fa33356465b040f55a672
Author: Sachin Kumar Chauhan <sachin.kc at samsung.com>
Date:   Tue May 10 11:40:03 2016 +0530

    module-filter-apply: Fix a memory leak
    
    Dynamic memory allocated to 'module_name' and 'fltr' was being leaked.
    Its now freed properly before return.
    
    BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=95293
    
    Signed-off-by: Sachin Kumar Chauhan <sachin.kc at samsung.com>
    Signed-off-by: Arun Raghavan <arun at arunraghavan.net>

diff --git a/src/modules/module-filter-apply.c b/src/modules/module-filter-apply.c
index 47ef46d..606ef01 100644
--- a/src/modules/module-filter-apply.c
+++ b/src/modules/module-filter-apply.c
@@ -416,6 +416,8 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
     pa_sink *sink = NULL;
     pa_source *source = NULL;
     pa_module *module = NULL;
+    char *module_name = NULL;
+    struct filter *fltr = NULL, *filter = NULL;
 
     if (is_sink_input) {
         sink = PA_SINK_INPUT(o)->sink;
@@ -431,31 +433,27 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
 
     /* If there is no sink/source yet, we can't do much */
     if ((is_sink_input && !sink) || (!is_sink_input && !source))
-        return PA_HOOK_OK;
+        goto done;
 
     /* If the stream doesn't what any filter, then let it be. */
     if ((want = should_filter(o, is_sink_input))) {
-        char *module_name;
-        struct filter *fltr, *filter;
-
         /* We need to ensure the SI is playing on a sink of this type
          * attached to the sink it's "officially" playing on */
 
         if (!module)
-            return PA_HOOK_OK;
+            goto done;
 
         module_name = pa_sprintf_malloc("module-%s", want);
         if (pa_streq(module->name, module_name)) {
             pa_log_debug("Stream appears to be playing on an appropriate sink already. Ignoring.");
-            pa_xfree(module_name);
-            return PA_HOOK_OK;
+            goto done;
         }
 
         fltr = filter_new(want, sink, source);
 
         if (should_group_filter(fltr) && !find_paired_master(u, fltr, o, is_sink_input)) {
             pa_log_debug("Want group filtering but don't have enough streams.");
-            return PA_HOOK_OK;
+            goto done;
         }
 
         if (!(filter = pa_hashmap_get(u->filters, fltr))) {
@@ -478,14 +476,10 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
             pa_xfree(args);
         }
 
-        pa_xfree(fltr);
-
         if (!filter) {
             pa_log("Unable to load %s", module_name);
-            pa_xfree(module_name);
-            return PA_HOOK_OK;
+            goto done;
         }
-        pa_xfree(module_name);
 
         /* We can move the stream now as we know the destination. If this
          * isn't true, we will do it later when the sink appears. */
@@ -495,7 +489,6 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
         }
     } else {
         void *state;
-        struct filter *filter = NULL;
 
         /* We do not want to filter... but are we already filtered?
          * This can happen if an input's proplist changes */
@@ -511,6 +504,10 @@ static pa_hook_result_t process(struct userdata *u, pa_object *o, bool is_sink_i
     if (done_something)
         trigger_housekeeping(u);
 
+done:
+    pa_xfree(module_name);
+    pa_xfree(fltr);
+
     return PA_HOOK_OK;
 }
 



More information about the pulseaudio-commits mailing list