diff --git a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c index 2c3f2ffdbc..11fc20f537 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c +++ b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c @@ -243,12 +243,21 @@ static void _state_job(void *data EINA_UNUSED) (class_vars.state == PA_CONTEXT_TERMINATED)) { Eo *eo_obj; - Eina_List *out; + Eina_List *out, *tmp; DBG("PA context fail."); + //ref everything in the list to be sure... + EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) { + eo_ref(eo_obj); + } + // the callback here can delete things in the list.. EINA_LIST_FOREACH(class_vars.outputs, out, eo_obj) { eo_do(eo_obj, eo_event_callback_call(ECORE_AUDIO_EV_OUT_PULSE_CONTEXT_FAIL, NULL, NULL)); } + // now unref everything safely + EINA_LIST_FOREACH_SAFE(class_vars.outputs, out, tmp, eo_obj) { + eo_unref(eo_obj); + } } class_vars.state_job = NULL; }