raster pushed a commit to branch master.

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

commit da791a0bf57f7d8901d7b61a00cd6a75b440196f
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Aug 19 13:26:11 2017 +0900

    e mixer - handle pulse exit/disconnect and not keep e client sinks
    
    we keps e client sinks even if we were dicsonnected from pulse... this
    caused fun crashes. fix
    
    @fix
---
 src/bin/e_client.c               | 5 ++---
 src/modules/mixer/e_mod_main.c   | 6 ++++++
 src/modules/mixer/gadget/mixer.c | 6 ++++++
 3 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index e6ff7aca3..035c66f96 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -585,6 +585,8 @@ _e_client_del(E_Client *ec)
    E_Client *child;
    E_Client_Volume_Sink *sink;
 
+   EINA_LIST_FREE(ec->sinks, sink)
+     e_client_volume_sink_remove(ec, sink);
    for (child = ec->stack.next; child; child = child->stack.next)
      e_client_act_close_begin(child);
    ec->changed = 0;
@@ -673,9 +675,6 @@ _e_client_del(E_Client *ec)
 
    e_comp->clients = eina_list_remove(e_comp->clients, ec);
    e_comp_object_render_update_del(ec->frame);
-
-   EINA_LIST_FREE(ec->sinks, sink)
-      sink->clients = eina_list_remove(sink->clients, ec);
 }
 
 ///////////////////////////////////////////
diff --git a/src/modules/mixer/e_mod_main.c b/src/modules/mixer/e_mod_main.c
index fe733371a..f973637f6 100644
--- a/src/modules/mixer/e_mod_main.c
+++ b/src/modules/mixer/e_mod_main.c
@@ -792,6 +792,12 @@ _sink_event(int type, void *info)
 static void
 _disconnected(void)
 {
+   E_Client_Volume_Sink *sink;
+
+   EINA_LIST_FREE(_client_sinks, sink)
+     {
+        e_client_volume_sink_del(sink);
+     }
    if (mixer_context) mixer_context->sink_default = NULL;
    _mixer_gadget_update();
 }
diff --git a/src/modules/mixer/gadget/mixer.c b/src/modules/mixer/gadget/mixer.c
index 04a8c5304..22d5f322d 100644
--- a/src/modules/mixer/gadget/mixer.c
+++ b/src/modules/mixer/gadget/mixer.c
@@ -712,6 +712,12 @@ _sink_event(int type, void *info)
 static void
 _disconnected(void)
 {
+   E_Client_Volume_Sink *sink;
+
+   EINA_LIST_FREE(_client_sinks, sink)
+     {
+        e_client_volume_sink_del(sink);
+     }
    if (gmixer_context) gmixer_context->sink_default = NULL;
    _mixer_gadget_update();
 }

-- 


Reply via email to