/* Called from the output thread context */ static void sink_input_state_change_cb(pa_sink_input *i, pa_sink_input_state_t state) { struct userdata *u; pa_sink_input_assert_ref(i); pa_assert_se(u = i->userdata); if (state == PA_SINK_INPUT_UNLINKED) pa_asyncmsgq_flush(u->asyncmsgq, false); }
void pa_thread_mq_done(pa_thread_mq *q) { pa_assert(q); /* Since we are called from main context we can be sure that the * inq is empty. However, the outq might still contain messages * for the main loop, which we need to dispatch (e.g. release * msgs, other stuff). Hence do so if we aren't currently * dispatching anyway. */ if (!pa_asyncmsgq_dispatching(q->outq)) pa_asyncmsgq_flush(q->outq, true); q->mainloop->io_free(q->read_event); q->mainloop->io_free(q->write_event); q->read_event = q->write_event = NULL; pa_asyncmsgq_unref(q->inq); pa_asyncmsgq_unref(q->outq); q->inq = q->outq = NULL; q->mainloop = NULL; }