#include <pulsecore/rtpoll.h>
/* Two way communication between a thread and a mainloop. Before the
- * thread is started a pa_pthread_mq should be initialized and than
+ * thread is started a pa_thread_mq should be initialized and than
* attached to the thread using pa_thread_mq_install(). */
typedef struct pa_thread_mq {
- pa_mainloop_api *mainloop;
+ pa_mainloop_api *main_mainloop;
+ pa_mainloop_api *thread_mainloop;
pa_asyncmsgq *inq, *outq;
- pa_io_event *read_event, *write_event;
+ pa_io_event *read_main_event, *write_main_event;
+ pa_io_event *read_thread_event, *write_thread_event;
} pa_thread_mq;
void pa_thread_mq_init(pa_thread_mq *q, pa_mainloop_api *mainloop, pa_rtpoll *rtpoll);
+void pa_thread_mq_init_thread_mainloop(pa_thread_mq *q, pa_mainloop_api *main_mainloop, pa_mainloop_api *thread_mainloop);
void pa_thread_mq_done(pa_thread_mq *q);
/* Install the specified pa_thread_mq object for the current thread */
/* Return the pa_thread_mq object that is set for the current thread */
pa_thread_mq *pa_thread_mq_get(void);
+/* Verify that we are in control context (aka 'main context'). */
+#define pa_assert_ctl_context(s) \
+ pa_assert(!pa_thread_mq_get())
+
+/* Verify that we are in IO context (aka 'thread context'). */
+#define pa_assert_io_context(s) \
+ pa_assert(pa_thread_mq_get())
+
#endif