diff --git a/src/modules/mixer/pa.h b/src/modules/mixer/pa.h index 5f726fda2..c656b0a82 100644 --- a/src/modules/mixer/pa.h +++ b/src/modules/mixer/pa.h @@ -459,6 +459,7 @@ struct Pulse_Sink { Eina_Bool mute : 1; /**< Mute switch of the sink */ Eina_Bool update : 1; Eina_Bool source : 1; /**< sink is actually a source */ + Eina_Bool deleted : 1; /**< sink has been deleted */ }; typedef uint32_t pa_pstream_descriptor[PA_PSTREAM_DESCRIPTOR_MAX]; diff --git a/src/modules/mixer/sink.c b/src/modules/mixer/sink.c index b357110af..18cf2cd7b 100644 --- a/src/modules/mixer/sink.c +++ b/src/modules/mixer/sink.c @@ -164,15 +164,19 @@ pulse_sink_free(Pulse_Sink *sink) { Pulse_Sink_Port_Info *pi; if (!sink) return; - if (sink->source) + if (!sink->deleted) { - if (eina_hash_del_by_key(pulse_sources, (uintptr_t*)&sink->index)) - return; - } - else - { - if (eina_hash_del_by_key(pulse_sinks, (uintptr_t*)&sink->index)) - return; + sink->deleted = EINA_TRUE; + if (sink->source) + { + eina_hash_del_by_key(pulse_sources, (uintptr_t*)&sink->index); + return; + } + else + { + eina_hash_del_by_key(pulse_sinks, (uintptr_t*)&sink->index); + return; + } } eina_stringshare_del(sink->name); eina_stringshare_del(sink->description);