diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index a745f09b6..3a2dd6c81 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -2536,14 +2536,14 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse * sink input handling a few lines down at * PA_SINK_MESSAGE_START_MOVE, too. */ + pa_assert(i->thread_info.attached); + i->thread_info.attached = false; + if (i->detach) i->detach(i); pa_sink_input_set_state_within_thread(i, i->state); - pa_assert(i->thread_info.attached); - i->thread_info.attached = false; - /* Since the caller sleeps in pa_sink_input_unlink(), * we can safely access data outside of thread_info even * though it is mutable */ @@ -2635,12 +2635,12 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse } } - if (i->detach) - i->detach(i); - pa_assert(i->thread_info.attached); i->thread_info.attached = false; + if (i->detach) + i->detach(i); + /* Let's remove the sink input ...*/ pa_hashmap_remove_and_free(s->thread_info.inputs, PA_UINT32_TO_PTR(i->index)); diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index 4615702bf..51b7fd9da 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -2062,12 +2062,12 @@ int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, int64_ pa_source_output_set_state_within_thread(o, o->state); - if (o->detach) - o->detach(o); - pa_assert(o->thread_info.attached); o->thread_info.attached = false; + if (o->detach) + o->detach(o); + if (o->thread_info.direct_on_input) { pa_hashmap_remove(o->thread_info.direct_on_input->thread_info.direct_outputs, PA_UINT32_TO_PTR(o->index)); o->thread_info.direct_on_input = NULL;