static void asyncmsgq_free(pa_asyncmsgq *a) { struct asyncmsgq_item *i; pa_assert(a); while ((i = pa_asyncq_pop(a->asyncq, false))) { pa_assert(!i->semaphore); if (i->object) pa_msgobject_unref(i->object); if (i->memchunk.memblock) pa_memblock_unref(i->memchunk.memblock); if (i->free_cb) i->free_cb(i->userdata); if (pa_flist_push(PA_STATIC_FLIST_GET(asyncmsgq), i) < 0) pa_xfree(i); } pa_asyncq_free(a->asyncq, NULL); pa_mutex_free(a->mutex); pa_xfree(a); }
int main(int argc, char *argv[]) { pa_asyncq *q; pa_thread *t1, *t2; pa_assert_se(q = pa_asyncq_new(0)); pa_assert_se(t1 = pa_thread_new("producer", producer, q)); pa_assert_se(t2 = pa_thread_new("consumer", consumer, q)); pa_thread_free(t1); pa_thread_free(t2); pa_asyncq_free(q, NULL); return 0; }