Lines Matching refs:m
56 static inline int in_worker(pa_threaded_mainloop *m) { in in_worker() argument
57 return pa_thread_self() == m->thread; in in_worker()
77 pa_threaded_mainloop *m = userdata; in thread() local
79 pa_mutex_lock(m->mutex); in thread()
81 (void) pa_mainloop_run(m->real_mainloop, NULL); in thread()
83 pa_mutex_unlock(m->mutex); in thread()
87 pa_threaded_mainloop *m; in pa_threaded_mainloop_new() local
91 m = pa_xnew0(pa_threaded_mainloop, 1); in pa_threaded_mainloop_new()
93 if (!(m->real_mainloop = pa_mainloop_new())) { in pa_threaded_mainloop_new()
94 pa_xfree(m); in pa_threaded_mainloop_new()
98 m->mutex = pa_mutex_new(true, true); in pa_threaded_mainloop_new()
99 m->cond = pa_cond_new(); in pa_threaded_mainloop_new()
100 m->accept_cond = pa_cond_new(); in pa_threaded_mainloop_new()
102 pa_mainloop_set_poll_func(m->real_mainloop, poll_func, m->mutex); in pa_threaded_mainloop_new()
104 return m; in pa_threaded_mainloop_new()
107 void pa_threaded_mainloop_free(pa_threaded_mainloop* m) { in pa_threaded_mainloop_free() argument
108 pa_assert(m); in pa_threaded_mainloop_free()
111 pa_assert((m->thread && !pa_thread_is_running(m->thread)) || !in_worker(m)); in pa_threaded_mainloop_free()
113 pa_threaded_mainloop_stop(m); in pa_threaded_mainloop_free()
115 if (m->thread) in pa_threaded_mainloop_free()
116 pa_thread_free(m->thread); in pa_threaded_mainloop_free()
118 pa_mainloop_free(m->real_mainloop); in pa_threaded_mainloop_free()
120 pa_mutex_free(m->mutex); in pa_threaded_mainloop_free()
121 pa_cond_free(m->cond); in pa_threaded_mainloop_free()
122 pa_cond_free(m->accept_cond); in pa_threaded_mainloop_free()
124 pa_xfree(m->name); in pa_threaded_mainloop_free()
125 pa_xfree(m); in pa_threaded_mainloop_free()
128 int pa_threaded_mainloop_start(pa_threaded_mainloop *m) { in pa_threaded_mainloop_start() argument
129 pa_assert(m); in pa_threaded_mainloop_start()
131 pa_assert(!m->thread || !pa_thread_is_running(m->thread)); in pa_threaded_mainloop_start()
133 if (!(m->thread = pa_thread_new(m->name ? m->name : "threaded-ml", thread, m))) in pa_threaded_mainloop_start()
139 void pa_threaded_mainloop_stop(pa_threaded_mainloop *m) { in pa_threaded_mainloop_stop() argument
140 pa_assert(m); in pa_threaded_mainloop_stop()
142 if (!m->thread || !pa_thread_is_running(m->thread)) in pa_threaded_mainloop_stop()
146 pa_assert(!in_worker(m)); in pa_threaded_mainloop_stop()
148 pa_mutex_lock(m->mutex); in pa_threaded_mainloop_stop()
149 pa_mainloop_quit(m->real_mainloop, 0); in pa_threaded_mainloop_stop()
150 pa_mutex_unlock(m->mutex); in pa_threaded_mainloop_stop()
152 pa_thread_join(m->thread); in pa_threaded_mainloop_stop()
155 void pa_threaded_mainloop_lock(pa_threaded_mainloop *m) { in pa_threaded_mainloop_lock() argument
156 pa_assert(m); in pa_threaded_mainloop_lock()
159 …pa_assert(!m->thread || !pa_thread_is_running(m->thread) || !in_worker(m) || pa_atomic_load(&m->in… in pa_threaded_mainloop_lock()
161 pa_mutex_lock(m->mutex); in pa_threaded_mainloop_lock()
164 void pa_threaded_mainloop_unlock(pa_threaded_mainloop *m) { in pa_threaded_mainloop_unlock() argument
165 pa_assert(m); in pa_threaded_mainloop_unlock()
168 …pa_assert(!m->thread || !pa_thread_is_running(m->thread) || !in_worker(m) || pa_atomic_load(&m->in… in pa_threaded_mainloop_unlock()
170 pa_mutex_unlock(m->mutex); in pa_threaded_mainloop_unlock()
174 void pa_threaded_mainloop_signal(pa_threaded_mainloop *m, int wait_for_accept) { in pa_threaded_mainloop_signal() argument
175 pa_assert(m); in pa_threaded_mainloop_signal()
177 pa_cond_signal(m->cond, 1); in pa_threaded_mainloop_signal()
180 m->n_waiting_for_accept ++; in pa_threaded_mainloop_signal()
182 while (m->n_waiting_for_accept > 0) in pa_threaded_mainloop_signal()
183 pa_cond_wait(m->accept_cond, m->mutex); in pa_threaded_mainloop_signal()
188 void pa_threaded_mainloop_wait(pa_threaded_mainloop *m) { in pa_threaded_mainloop_wait() argument
189 pa_assert(m); in pa_threaded_mainloop_wait()
192 pa_assert(!m->thread || !pa_thread_is_running(m->thread) || !in_worker(m)); in pa_threaded_mainloop_wait()
194 m->n_waiting ++; in pa_threaded_mainloop_wait()
196 pa_cond_wait(m->cond, m->mutex); in pa_threaded_mainloop_wait()
198 pa_assert(m->n_waiting > 0); in pa_threaded_mainloop_wait()
199 m->n_waiting --; in pa_threaded_mainloop_wait()
203 void pa_threaded_mainloop_accept(pa_threaded_mainloop *m) { in pa_threaded_mainloop_accept() argument
204 pa_assert(m); in pa_threaded_mainloop_accept()
207 pa_assert(!m->thread || !pa_thread_is_running(m->thread) || !in_worker(m)); in pa_threaded_mainloop_accept()
209 pa_assert(m->n_waiting_for_accept > 0); in pa_threaded_mainloop_accept()
210 m->n_waiting_for_accept --; in pa_threaded_mainloop_accept()
212 pa_cond_signal(m->accept_cond, 0); in pa_threaded_mainloop_accept()
215 int pa_threaded_mainloop_get_retval(const pa_threaded_mainloop *m) { in pa_threaded_mainloop_get_retval() argument
216 pa_assert(m); in pa_threaded_mainloop_get_retval()
218 return pa_mainloop_get_retval(m->real_mainloop); in pa_threaded_mainloop_get_retval()
221 pa_mainloop_api* pa_threaded_mainloop_get_api(pa_threaded_mainloop*m) { in pa_threaded_mainloop_get_api() argument
222 pa_assert(m); in pa_threaded_mainloop_get_api()
224 return pa_mainloop_get_api(m->real_mainloop); in pa_threaded_mainloop_get_api()
227 int pa_threaded_mainloop_in_thread(pa_threaded_mainloop *m) { in pa_threaded_mainloop_in_thread() argument
228 pa_assert(m); in pa_threaded_mainloop_in_thread()
230 return m->thread && pa_thread_self() == m->thread; in pa_threaded_mainloop_in_thread()
233 void pa_threaded_mainloop_set_name(pa_threaded_mainloop *m, const char *name) { in pa_threaded_mainloop_set_name() argument
234 pa_assert(m); in pa_threaded_mainloop_set_name()
237 m->name = pa_xstrdup(name); in pa_threaded_mainloop_set_name()
239 if (m->thread) in pa_threaded_mainloop_set_name()
240 pa_thread_set_name(m->thread, m->name); in pa_threaded_mainloop_set_name()
245 void (*callback)(pa_threaded_mainloop *m, void *userdata);
265 …_threaded_mainloop_once_unlocked(pa_threaded_mainloop *m, void (*callback)(pa_threaded_mainloop *m… in pa_threaded_mainloop_once_unlocked() argument
270 pa_assert(m); in pa_threaded_mainloop_once_unlocked()
273 pa_assert((m->thread && !pa_thread_is_running(m->thread)) || !in_worker(m)); in pa_threaded_mainloop_once_unlocked()
275 api = pa_mainloop_get_api(m->real_mainloop); in pa_threaded_mainloop_once_unlocked()
278 data->mainloop = m; in pa_threaded_mainloop_once_unlocked()