discomfitor pushed a commit to branch enlightenment-0.20.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=a71b5170dcdef2106ac6551125d171b6687acf63

commit a71b5170dcdef2106ac6551125d171b6687acf63
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Tue May 17 15:05:18 2016 -0400

    remove pulse sinks/sources from list before running cbs which access the 
list
    
    this guarantees a crash any time the default sink gets removed since it will
    always re-set the about-to-be-deleted default sink as the default sink
    
    fix T3277 probably
---
 src/modules/mixer/lib/backends/pulseaudio/pulse.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/modules/mixer/lib/backends/pulseaudio/pulse.c 
b/src/modules/mixer/lib/backends/pulseaudio/pulse.c
index 9660318..15fadea 100644
--- a/src/modules/mixer/lib/backends/pulseaudio/pulse.c
+++ b/src/modules/mixer/lib/backends/pulseaudio/pulse.c
@@ -257,11 +257,11 @@ _sink_remove_cb(int index, void *data EINA_UNUSED)
      {
         if (sink->idx == index)
           {
+             ctx->sinks = eina_list_remove_list(ctx->sinks, l);
              if (ctx->cb)
                ctx->cb((void *)ctx->userdata, EMIX_SINK_REMOVED_EVENT,
                             (Emix_Sink *)sink);
              _sink_del(sink);
-             ctx->sinks = eina_list_remove_list(ctx->sinks, l);
              break;
           }
      }
@@ -405,13 +405,13 @@ _sink_input_remove_cb(int index, void *data EINA_UNUSED)
      {
         if (input->idx == index)
           {
+             ctx->inputs = eina_list_remove_list(ctx->inputs, l);
              if (ctx->cb)
                ctx->cb((void *)ctx->userdata,
                        EMIX_SINK_INPUT_REMOVED_EVENT,
                        (Emix_Sink_Input *)input);
              _sink_input_del(input);
 
-             ctx->inputs = eina_list_remove_list(ctx->inputs, l);
              break;
           }
      }
@@ -510,12 +510,12 @@ _source_remove_cb(int index, void *data EINA_UNUSED)
      {
         if (source->idx == index)
           {
+             ctx->sources = eina_list_remove_list(ctx->sources, l);
              if (ctx->cb)
                ctx->cb((void *)ctx->userdata, EMIX_SOURCE_REMOVED_EVENT,
                        (Emix_Source *)source);
 
              _source_del(source);
-             ctx->sources = eina_list_remove_list(ctx->sources, l);
              break;
           }
      }

-- 


Reply via email to