pipe-sink: use existing fifo

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.
This commit is contained in:
Samo Pogačnik 2018-01-18 16:15:18 +01:00 committed by Georg Chini
parent fb8f978676
commit 2563cd65bc

View file

@ -78,6 +78,7 @@ struct userdata {
char *filename; char *filename;
int fd; int fd;
bool do_unlink_fifo;
size_t buffer_size; size_t buffer_size;
size_t bytes_dropped; size_t bytes_dropped;
bool fifo_error; bool fifo_error;
@ -450,11 +451,16 @@ int pa__init(pa_module *m) {
u->write_type = 0; u->write_type = 0;
u->filename = pa_runtime_path(pa_modargs_get_value(ma, "file", DEFAULT_FILE_NAME)); 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) { if (mkfifo(u->filename, 0666) < 0) {
if (errno != EEXIST) {
pa_log("mkfifo('%s'): %s", u->filename, pa_cstrerror(errno)); pa_log("mkfifo('%s'): %s", u->filename, pa_cstrerror(errno));
goto fail; goto fail;
} }
} else
u->do_unlink_fifo = true;
if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) { if ((u->fd = pa_open_cloexec(u->filename, O_RDWR, 0)) < 0) {
pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno)); pa_log("open('%s'): %s", u->filename, pa_cstrerror(errno));
goto fail; goto fail;
@ -584,6 +590,7 @@ void pa__done(pa_module *m) {
pa_rtpoll_free(u->rtpoll); pa_rtpoll_free(u->rtpoll);
if (u->filename) { if (u->filename) {
if (u->do_unlink_fifo)
unlink(u->filename); unlink(u->filename);
pa_xfree(u->filename); pa_xfree(u->filename);
} }