[pulseaudio-commits] 2 commits - src/modules
Tanu Kaskinen
tanuk at kemper.freedesktop.org
Fri Oct 4 04:30:49 PDT 2013
src/modules/module-tunnel-sink-new.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
New commits:
commit 3fd2004603b1df207e21fde846c0ea0bd4f96aa2
Author: Alexander Couzens <lynxis at fe80.eu>
Date: Mon Sep 16 13:06:27 2013 +0200
tunnel-sink-new: Fix a possible crash
When the creation of u->thread fails, then pa_thread_mq_done() in
pa__done() will crash, because pa_thread_mq_init() was never called.
Allocating the thread_mq object separately, instead of embedding it
in the userdata struct, allows pa__done() to call pa_thread_mq_done()
only when necessary.
diff --git a/src/modules/module-tunnel-sink-new.c b/src/modules/module-tunnel-sink-new.c
index e0dbe91..ee05d18 100644
--- a/src/modules/module-tunnel-sink-new.c
+++ b/src/modules/module-tunnel-sink-new.c
@@ -71,7 +71,7 @@ struct userdata {
pa_module *module;
pa_sink *sink;
pa_thread *thread;
- pa_thread_mq thread_mq;
+ pa_thread_mq *thread_mq;
pa_mainloop *thread_mainloop;
pa_mainloop_api *thread_mainloop_api;
@@ -126,7 +126,7 @@ static void thread_func(void *userdata) {
pa_assert(u);
pa_log_debug("Thread starting up");
- pa_thread_mq_install(&u->thread_mq);
+ pa_thread_mq_install(u->thread_mq);
proplist = tunnel_new_proplist(u);
u->context = pa_context_new_with_proplist(u->thread_mainloop_api,
@@ -203,8 +203,8 @@ static void thread_func(void *userdata) {
}
}
fail:
- pa_asyncmsgq_post(u->thread_mq.outq, PA_MSGOBJECT(u->module->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
- pa_asyncmsgq_wait_for(u->thread_mq.inq, PA_MESSAGE_SHUTDOWN);
+ pa_asyncmsgq_post(u->thread_mq->outq, PA_MSGOBJECT(u->module->core), PA_CORE_MESSAGE_UNLOAD_MODULE, u->module, 0, NULL, NULL);
+ pa_asyncmsgq_wait_for(u->thread_mq->inq, PA_MESSAGE_SHUTDOWN);
finish:
if (u->stream) {
@@ -453,7 +453,8 @@ int pa__init(pa_module *m) {
u->remote_sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
- pa_thread_mq_init_thread_mainloop(&u->thread_mq, m->core->mainloop, u->thread_mainloop_api);
+ u->thread_mq = pa_xnew0(pa_thread_mq, 1);
+ pa_thread_mq_init_thread_mainloop(u->thread_mq, m->core->mainloop, u->thread_mainloop_api);
/* Create sink */
pa_sink_new_data_init(&sink_data);
@@ -491,7 +492,7 @@ int pa__init(pa_module *m) {
u->sink->update_requested_latency = sink_update_requested_latency_cb;
/* set thread message queue */
- pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
+ pa_sink_set_asyncmsgq(u->sink, u->thread_mq->inq);
if (!(u->thread = pa_thread_new("tunnel-sink", thread_func, u))) {
pa_log("Failed to create thread.");
@@ -528,11 +529,14 @@ void pa__done(pa_module *m) {
pa_sink_unlink(u->sink);
if (u->thread) {
- pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
+ pa_asyncmsgq_send(u->thread_mq->inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
pa_thread_free(u->thread);
}
- pa_thread_mq_done(&u->thread_mq);
+ if (u->thread_mq) {
+ pa_thread_mq_done(u->thread_mq);
+ pa_xfree(u->thread_mq);
+ }
if (u->thread_mainloop)
pa_mainloop_free(u->thread_mainloop);
commit 0c3f3934f59e001dc64d29dd226fe9ceac74337a
Author: Alexander Couzens <lynxis at fe80.eu>
Date: Mon Sep 16 13:06:34 2013 +0200
tunnel-sink-new: remove switch-default from state change callbacks
Using default sections for switch(state) in state change callbacks will prevent
useful compiler warnings for non-handled cases
diff --git a/src/modules/module-tunnel-sink-new.c b/src/modules/module-tunnel-sink-new.c
index cd7c39c..e0dbe91 100644
--- a/src/modules/module-tunnel-sink-new.c
+++ b/src/modules/module-tunnel-sink-new.c
@@ -245,7 +245,8 @@ static void stream_state_cb(pa_stream *stream, void *userdata) {
sink_update_requested_latency_cb(u->sink);
else
stream_changed_buffer_attr_cb(stream, userdata);
- default:
+ case PA_STREAM_CREATING:
+ case PA_STREAM_UNCONNECTED:
break;
}
}
@@ -333,8 +334,6 @@ static void context_state_cb(pa_context *c, void *userdata) {
u->connected = false;
u->thread_mainloop_api->quit(u->thread_mainloop_api, TUNNEL_THREAD_FAILED_MAINLOOP);
break;
- default:
- break;
}
}
More information about the pulseaudio-commits
mailing list