#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
-#include <string.h>
#include <fcntl.h>
#include <unistd.h>
-#include <limits.h>
#include <sys/ioctl.h>
-#include <poll.h>
+
+#ifdef HAVE_SYS_FILIO_H
+#include <sys/filio.h>
+#endif
#include <pulse/xmalloc.h>
#include <pulsecore/thread.h>
#include <pulsecore/thread-mq.h>
#include <pulsecore/rtpoll.h>
+#include <pulsecore/poll.h>
#include "module-pipe-sink-symdef.h"
"sink_properties=<properties for the sink> "
"file=<path of the FIFO> "
"format=<sample format> "
- "rate=<sample rate>"
+ "rate=<sample rate> "
"channels=<number of channels> "
"channel_map=<channel map>");
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
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;
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;
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;
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;
}
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);
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);