X-Git-Url: https://code.delx.au/pulseaudio/blobdiff_plain/4d62f159a74c6e5b46be5823483a7dedd5691b45..f5f77a90cfe2a089e92d9e3b6be3e6a9a5504d82:/src/modules/module-pipe-sink.c?ds=sidebyside diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c index 10cc3415..54dceb4e 100644 --- a/src/modules/module-pipe-sink.c +++ b/src/modules/module-pipe-sink.c @@ -27,12 +27,13 @@ #include #include #include -#include #include #include -#include #include -#include + +#ifdef HAVE_SYS_FILIO_H +#include +#endif #include @@ -45,6 +46,7 @@ #include #include #include +#include #include "module-pipe-sink-symdef.h" @@ -57,7 +59,7 @@ PA_MODULE_USAGE( "sink_properties= " "file= " "format= " - "rate=" + "rate= " "channels= " "channel_map="); @@ -101,9 +103,10 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse case PA_SINK_MESSAGE_GET_LATENCY: { size_t n = 0; - int l; #ifdef FIONREAD + int l; + if (ioctl(u->fd, FIONREAD, &l) >= 0 && l > 0) n = (size_t) l; #endif @@ -177,12 +180,11 @@ static void thread_func(void *userdata) { pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL); + if (PA_UNLIKELY(u->sink->thread_info.rewind_requested)) + pa_sink_process_rewind(u->sink, 0); + /* Render some data and write it to the fifo */ if (PA_SINK_IS_OPENED(u->sink->thread_info.state)) { - - if (u->sink->thread_info.rewind_requested) - pa_sink_process_rewind(u->sink, 0); - if (pollfd->revents) { if (process_render(u) < 0) goto fail; @@ -218,7 +220,7 @@ finish: pa_log_debug("Thread shutting down"); } -int pa__init(pa_module*m) { +int pa__init(pa_module *m) { struct userdata *u; struct stat st; pa_sample_spec ss; @@ -252,7 +254,10 @@ int pa__init(pa_module*m) { u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME)); - mkfifo(u->filename, 0666); + if (mkfifo(u->filename, 0666) < 0) { + pa_log("mkfifo('%s'): %s", u->filename, pa_cstrerror(errno)); + goto fail; + } if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) { pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno)); goto fail; @@ -306,7 +311,7 @@ int pa__init(pa_module*m) { pollfd->fd = u->fd; pollfd->events = pollfd->revents = 0; - if (!(u->thread = pa_thread_new(thread_func, u))) { + if (!(u->thread = pa_thread_new("pipe-sink", thread_func, u))) { pa_log("Failed to create thread."); goto fail; } @@ -335,7 +340,7 @@ int pa__get_n_used(pa_module *m) { return pa_sink_linked_by(u->sink); } -void pa__done(pa_module*m) { +void pa__done(pa_module *m) { struct userdata *u; pa_assert(m); @@ -357,7 +362,7 @@ void pa__done(pa_module*m) { pa_sink_unref(u->sink); if (u->memchunk.memblock) - pa_memblock_unref(u->memchunk.memblock); + pa_memblock_unref(u->memchunk.memblock); if (u->rtpoll_item) pa_rtpoll_item_free(u->rtpoll_item);