From da791a0bf57f7d8901d7b61a00cd6a75b440196f Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Sat, 19 Aug 2017 13:26:11 +0900 Subject: [PATCH] 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(); }