Allow usage of an already existing fifo (named pipe) within the pipe-sink module. Also, the used fifo is going to be removed upon module unload only if the fifo is created by the same module. --- src/modules/module-pipe-sink.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c index fe2af70..a2074c1 100644 --- a/src/modules/module-pipe-sink.c +++ b/src/modules/module-pipe-sink.c @@ -78,6 +78,7 @@ struct userdata { char *filename; int fd; + bool do_unlink_fifo; size_t buffer_size; size_t bytes_dropped; bool fifo_error; @@ -450,11 +451,16 @@ int pa__init(pa_module *m) { u->write_type = 0; u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME)); + u->do_unlink_fifo = false; if (mkfifo(u->filename, 0666) < 0) { - pa_log("mkfifo('%s'): %s", u->filename, pa_cstrerror(errno)); - goto fail; - } + if (errno != EEXIST) { + pa_log("mkfifo('%s'): %s", u->filename, pa_cstrerror(errno)); + goto fail; + } + } else + u->do_unlink_fifo = true; + if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) { pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno)); goto fail; @@ -584,7 +590,8 @@ void pa__done(pa_module *m) { pa_rtpoll_free(u->rtpoll); if (u->filename) { - unlink(u->filename); + if (u->do_unlink_fifo) + unlink(u->filename); pa_xfree(u->filename); } -- 2.7.4 regards, Samo