mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
consolidate close() calls to pa_close(), and make sure on every occasion that we handle failures of close() sensibly
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1811 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
54506ab44a
commit
7f92542420
18 changed files with 89 additions and 81 deletions
|
|
@ -223,9 +223,9 @@ void pa_cpu_limit_done(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (the_pipe[0] >= 0)
|
if (the_pipe[0] >= 0)
|
||||||
close(the_pipe[0]);
|
pa_assert_se(pa_close(the_pipe[0]) == 0);
|
||||||
if (the_pipe[1] >= 0)
|
if (the_pipe[1] >= 0)
|
||||||
close(the_pipe[1]);
|
pa_assert_se(pa_close(the_pipe[1]) == 0);
|
||||||
the_pipe[0] = the_pipe[1] = -1;
|
the_pipe[0] = the_pipe[1] = -1;
|
||||||
|
|
||||||
if (installed) {
|
if (installed) {
|
||||||
|
|
|
||||||
|
|
@ -160,9 +160,9 @@ static void signal_callback(pa_mainloop_api*m, PA_GCC_UNUSED pa_signal_event *e,
|
||||||
|
|
||||||
static void close_pipe(int p[2]) {
|
static void close_pipe(int p[2]) {
|
||||||
if (p[0] != -1)
|
if (p[0] != -1)
|
||||||
close(p[0]);
|
pa_assert_se(pa_close(p[0]) == 0);
|
||||||
if (p[1] != -1)
|
if (p[1] != -1)
|
||||||
close(p[1]);
|
pa_assert_se(pa_close(p[1]) == 0);
|
||||||
p[0] = p[1] = -1;
|
p[0] = p[1] = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -537,7 +537,7 @@ int main(int argc, char *argv[]) {
|
||||||
if (child != 0) {
|
if (child != 0) {
|
||||||
/* Father */
|
/* Father */
|
||||||
|
|
||||||
close(daemon_pipe[1]);
|
pa_assert_se(pa_close(daemon_pipe[1]) == 0);
|
||||||
daemon_pipe[1] = -1;
|
daemon_pipe[1] = -1;
|
||||||
|
|
||||||
if (pa_loop_read(daemon_pipe[0], &retval, sizeof(retval), NULL) != sizeof(retval)) {
|
if (pa_loop_read(daemon_pipe[0], &retval, sizeof(retval), NULL) != sizeof(retval)) {
|
||||||
|
|
@ -553,7 +553,7 @@ int main(int argc, char *argv[]) {
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(daemon_pipe[0]);
|
pa_assert_se(pa_close(daemon_pipe[0]) == 0);
|
||||||
daemon_pipe[0] = -1;
|
daemon_pipe[0] = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -568,9 +568,9 @@ int main(int argc, char *argv[]) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef OS_IS_WIN32
|
#ifndef OS_IS_WIN32
|
||||||
close(0);
|
pa_close(0);
|
||||||
close(1);
|
pa_close(1);
|
||||||
close(2);
|
pa_close(2);
|
||||||
|
|
||||||
open("/dev/null", O_RDONLY);
|
open("/dev/null", O_RDONLY);
|
||||||
open("/dev/null", O_WRONLY);
|
open("/dev/null", O_WRONLY);
|
||||||
|
|
@ -592,7 +592,7 @@ int main(int argc, char *argv[]) {
|
||||||
#ifdef TIOCNOTTY
|
#ifdef TIOCNOTTY
|
||||||
if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) {
|
if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) {
|
||||||
ioctl(tty_fd, TIOCNOTTY, (char*) 0);
|
ioctl(tty_fd, TIOCNOTTY, (char*) 0);
|
||||||
close(tty_fd);
|
pa_assert_se(pa_close(tty_fd) == 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ int pa__init(pa_module*m) {
|
||||||
if (pa_loop_write(fd, &x, sizeof(x), NULL) != sizeof(x))
|
if (pa_loop_write(fd, &x, sizeof(x), NULL) != sizeof(x))
|
||||||
pa_log_warn("WARNING: write(%u, 1, 1) failed: %s", fd, pa_cstrerror(errno));
|
pa_log_warn("WARNING: write(%u, 1, 1) failed: %s", fd, pa_cstrerror(errno));
|
||||||
|
|
||||||
close(fd);
|
pa_assert_se(pa_close(fd) == 0);
|
||||||
|
|
||||||
pa_module_unload_request(m);
|
pa_module_unload_request(m);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ void pa__done(pa_module*m) {
|
||||||
m->core->mainloop->io_free(u->io);
|
m->core->mainloop->io_free(u->io);
|
||||||
|
|
||||||
if (u->fd >= 0)
|
if (u->fd >= 0)
|
||||||
close(u->fd);
|
pa_assert_se(pa_close(u->fd) == 0);
|
||||||
|
|
||||||
pa_xfree(u->sink_name);
|
pa_xfree(u->sink_name);
|
||||||
pa_xfree(u);
|
pa_xfree(u);
|
||||||
|
|
|
||||||
|
|
@ -476,7 +476,7 @@ static int suspend(struct userdata *u) {
|
||||||
|
|
||||||
/* Let's suspend */
|
/* Let's suspend */
|
||||||
ioctl(u->fd, SNDCTL_DSP_SYNC, NULL);
|
ioctl(u->fd, SNDCTL_DSP_SYNC, NULL);
|
||||||
close(u->fd);
|
pa_close(u->fd);
|
||||||
u->fd = -1;
|
u->fd = -1;
|
||||||
|
|
||||||
if (u->rtpoll_item) {
|
if (u->rtpoll_item) {
|
||||||
|
|
@ -588,7 +588,7 @@ static int unsuspend(struct userdata *u) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
close(u->fd);
|
pa_close(u->fd);
|
||||||
u->fd = -1;
|
u->fd = -1;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -1324,7 +1324,7 @@ fail:
|
||||||
if (u)
|
if (u)
|
||||||
pa__done(m);
|
pa__done(m);
|
||||||
else if (fd >= 0)
|
else if (fd >= 0)
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
|
|
||||||
if (ma)
|
if (ma)
|
||||||
pa_modargs_free(ma);
|
pa_modargs_free(ma);
|
||||||
|
|
@ -1391,7 +1391,7 @@ void pa__done(pa_module*m) {
|
||||||
munmap(u->out_mmap, u->out_hwbuf_size);
|
munmap(u->out_mmap, u->out_hwbuf_size);
|
||||||
|
|
||||||
if (u->fd >= 0)
|
if (u->fd >= 0)
|
||||||
close(u->fd);
|
pa_close(u->fd);
|
||||||
|
|
||||||
pa_xfree(u->device_name);
|
pa_xfree(u->device_name);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -335,7 +335,7 @@ void pa__done(pa_module*m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (u->fd >= 0)
|
if (u->fd >= 0)
|
||||||
close(u->fd);
|
pa_assert_se(pa_close(u->fd) == 0);
|
||||||
|
|
||||||
pa_xfree(u);
|
pa_xfree(u);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -313,7 +313,7 @@ void pa__done(pa_module*m) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (u->fd >= 0)
|
if (u->fd >= 0)
|
||||||
close(u->fd);
|
pa_assert_se(pa_close(u->fd) == 0);
|
||||||
|
|
||||||
pa_xfree(u);
|
pa_xfree(u);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ int pa_oss_open(const char *device, int *mode, int* pcaps) {
|
||||||
|
|
||||||
pa_log_warn("'%s' doesn't support full duplex", device);
|
pa_log_warn("'%s' doesn't support full duplex", device);
|
||||||
|
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fd = open(device, (*mode = O_WRONLY)|O_NDELAY|O_NOCTTY)) < 0) {
|
if ((fd = open(device, (*mode = O_WRONLY)|O_NDELAY|O_NOCTTY)) < 0) {
|
||||||
|
|
@ -147,7 +147,7 @@ success:
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -524,7 +524,7 @@ static int context_connect_spawn(pa_context *c) {
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
/* Not required, since fds[0] has CLOEXEC enabled anyway */
|
/* Not required, since fds[0] has CLOEXEC enabled anyway */
|
||||||
close(fds[0]);
|
pa_assert_se(pa_close(fds[0]) == 0);
|
||||||
|
|
||||||
if (c->spawn_api.atfork)
|
if (c->spawn_api.atfork)
|
||||||
c->spawn_api.atfork();
|
c->spawn_api.atfork();
|
||||||
|
|
@ -571,7 +571,7 @@ static int context_connect_spawn(pa_context *c) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fds[1]);
|
pa_assert_se(pa_close(fds[1]) == 0);
|
||||||
|
|
||||||
c->is_local = 1;
|
c->is_local = 1;
|
||||||
|
|
||||||
|
|
@ -586,9 +586,9 @@ static int context_connect_spawn(pa_context *c) {
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (fds[0] != -1)
|
if (fds[0] != -1)
|
||||||
close(fds[0]);
|
pa_assert_se(pa_close(fds[0]) == 0);
|
||||||
if (fds[1] != -1)
|
if (fds[1] != -1)
|
||||||
close(fds[1]);
|
pa_assert_se(pa_close(fds[1]) == 0);
|
||||||
|
|
||||||
unlock_autospawn_lock_file(c);
|
unlock_autospawn_lock_file(c);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -606,9 +606,9 @@ void pa_mainloop_free(pa_mainloop* m) {
|
||||||
pa_xfree(m->pollfds);
|
pa_xfree(m->pollfds);
|
||||||
|
|
||||||
if (m->wakeup_pipe[0] >= 0)
|
if (m->wakeup_pipe[0] >= 0)
|
||||||
close(m->wakeup_pipe[0]);
|
pa_assert_se(pa_close(m->wakeup_pipe[0]) == 0);
|
||||||
if (m->wakeup_pipe[1] >= 0)
|
if (m->wakeup_pipe[1] >= 0)
|
||||||
close(m->wakeup_pipe[1]);
|
pa_assert_se(pa_close(m->wakeup_pipe[1]) == 0);
|
||||||
|
|
||||||
pa_xfree(m);
|
pa_xfree(m);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,10 @@ finish:
|
||||||
if (unlock)
|
if (unlock)
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
|
|
||||||
close(fd);
|
if (pa_close(fd) < 0) {
|
||||||
|
pa_log_warn("Failed to close cookie file: %s", pa_cstrerror(errno));
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -221,7 +224,10 @@ finish:
|
||||||
if (unlock)
|
if (unlock)
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
|
|
||||||
close(fd);
|
if (pa_close(fd) < 0) {
|
||||||
|
pa_log_warn("Failed to close cookie file: %s", pa_cstrerror(errno));
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -360,11 +360,11 @@ ssize_t pa_loop_write(int fd, const void*data, size_t size, int *type) {
|
||||||
/** Platform independent read function. Necessary since not all
|
/** Platform independent read function. Necessary since not all
|
||||||
* systems treat all file descriptors equal. */
|
* systems treat all file descriptors equal. */
|
||||||
int pa_close(int fd) {
|
int pa_close(int fd) {
|
||||||
|
|
||||||
#ifdef OS_IS_WIN32
|
#ifdef OS_IS_WIN32
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = closesocket(fd);
|
if ((ret = closesocket(fd)) == 0)
|
||||||
if (ret == 0)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (WSAGetLastError() != WSAENOTSOCK) {
|
if (WSAGetLastError() != WSAENOTSOCK) {
|
||||||
|
|
@ -838,8 +838,7 @@ int pa_lock_fd(int fd, int b) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_log("%slock: %s", !b? "un" : "",
|
pa_log("%slock: %s", !b? "un" : "", pa_cstrerror(errno));
|
||||||
pa_cstrerror(errno));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef OS_IS_WIN32
|
#ifdef OS_IS_WIN32
|
||||||
|
|
@ -873,32 +872,33 @@ int pa_lock_lockfile(const char *fn) {
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if ((fd = open(fn, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR)) < 0) {
|
if ((fd = open(fn, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR)) < 0) {
|
||||||
pa_log("failed to create lock file '%s': %s", fn,
|
pa_log_warn("Failed to create lock file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pa_lock_fd(fd, 1) < 0) {
|
if (pa_lock_fd(fd, 1) < 0) {
|
||||||
pa_log("failed to lock file '%s'.", fn);
|
pa_log_warn("Failed to lock file '%s'.", fn);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fstat(fd, &st) < 0) {
|
if (fstat(fd, &st) < 0) {
|
||||||
pa_log("failed to fstat() file '%s'.", fn);
|
pa_log_warn("Failed to fstat() file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check wheter the file has been removed meanwhile. When yes, restart this loop, otherwise, we're done */
|
/* Check wheter the file has been removed meanwhile. When yes,
|
||||||
|
* restart this loop, otherwise, we're done */
|
||||||
if (st.st_nlink >= 1)
|
if (st.st_nlink >= 1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (pa_lock_fd(fd, 0) < 0) {
|
if (pa_lock_fd(fd, 0) < 0) {
|
||||||
pa_log("failed to unlock file '%s'.", fn);
|
pa_log_warn("Failed to unlock file '%s'.", fn);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (close(fd) < 0) {
|
if (pa_close(fd) < 0) {
|
||||||
pa_log("failed to close file '%s'.", fn);
|
pa_log_warn("Failed to close file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
|
fd = -1;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -910,7 +910,7 @@ int pa_lock_lockfile(const char *fn) {
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -922,19 +922,17 @@ int pa_unlock_lockfile(const char *fn, int fd) {
|
||||||
pa_assert(fd >= 0);
|
pa_assert(fd >= 0);
|
||||||
|
|
||||||
if (unlink(fn) < 0) {
|
if (unlink(fn) < 0) {
|
||||||
pa_log_warn("WARNING: unable to remove lock file '%s': %s",
|
pa_log_warn("Unable to remove lock file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pa_lock_fd(fd, 0) < 0) {
|
if (pa_lock_fd(fd, 0) < 0) {
|
||||||
pa_log_warn("WARNING: failed to unlock file '%s'.", fn);
|
pa_log_warn("Failed to unlock file '%s'.", fn);
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (close(fd) < 0) {
|
if (pa_close(fd) < 0) {
|
||||||
pa_log_warn("WARNING: failed to close lock file '%s': %s",
|
pa_log_warn("Failed to close '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,8 +67,8 @@ pa_fdsem *pa_fdsem_new(void) {
|
||||||
void pa_fdsem_free(pa_fdsem *f) {
|
void pa_fdsem_free(pa_fdsem *f) {
|
||||||
pa_assert(f);
|
pa_assert(f);
|
||||||
|
|
||||||
close(f->fds[0]);
|
pa_assert_se(pa_close(f->fds[0]) == 0);
|
||||||
close(f->fds[1]);
|
pa_assert_se(pa_close(f->fds[1]) == 0);
|
||||||
|
|
||||||
pa_xfree(f);
|
pa_xfree(f);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -61,8 +61,7 @@ static pid_t read_pid(const char *fn, int fd) {
|
||||||
pa_assert(fd >= 0);
|
pa_assert(fd >= 0);
|
||||||
|
|
||||||
if ((r = pa_loop_read(fd, t, sizeof(t)-1, NULL)) < 0) {
|
if ((r = pa_loop_read(fd, t, sizeof(t)-1, NULL)) < 0) {
|
||||||
pa_log_warn("WARNING: failed to read PID file '%s': %s",
|
pa_log_warn("Failed to read PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
return (pid_t) -1;
|
return (pid_t) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -74,7 +73,7 @@ static pid_t read_pid(const char *fn, int fd) {
|
||||||
*e = 0;
|
*e = 0;
|
||||||
|
|
||||||
if (pa_atou(t, &pid) < 0) {
|
if (pa_atou(t, &pid) < 0) {
|
||||||
pa_log_warn("WARNING: failed to parse PID file '%s'", fn);
|
pa_log_warn("Failed to parse PID file '%s'", fn);
|
||||||
return (pid_t) -1;
|
return (pid_t) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -91,8 +90,7 @@ static int open_pid_file(const char *fn, int mode) {
|
||||||
|
|
||||||
if ((fd = open(fn, mode, S_IRUSR|S_IWUSR)) < 0) {
|
if ((fd = open(fn, mode, S_IRUSR|S_IWUSR)) < 0) {
|
||||||
if (mode != O_RDONLY || errno != ENOENT)
|
if (mode != O_RDONLY || errno != ENOENT)
|
||||||
pa_log_warn("WARNING: failed to open PID file '%s': %s",
|
pa_log_warn("WARNING: failed to open PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,8 +99,7 @@ static int open_pid_file(const char *fn, int mode) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (fstat(fd, &st) < 0) {
|
if (fstat(fd, &st) < 0) {
|
||||||
pa_log_warn("WARNING: failed to fstat() PID file '%s': %s",
|
pa_log_warn("Failed to fstat() PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -113,9 +110,9 @@ static int open_pid_file(const char *fn, int mode) {
|
||||||
if (pa_lock_fd(fd, 0) < 0)
|
if (pa_lock_fd(fd, 0) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (close(fd) < 0) {
|
if (pa_close(fd) < 0) {
|
||||||
pa_log_warn("WARNING: failed to close file '%s': %s",
|
pa_log_warn("Failed to close file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
fd = -1;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,7 +125,7 @@ fail:
|
||||||
|
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -153,7 +150,7 @@ int pa_pid_file_create(void) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if ((pid = read_pid(fn, fd)) == (pid_t) -1)
|
if ((pid = read_pid(fn, fd)) == (pid_t) -1)
|
||||||
pa_log("corrupt PID file, overwriting.");
|
pa_log_warn("Corrupt PID file, overwriting.");
|
||||||
else if (pid > 0) {
|
else if (pid > 0) {
|
||||||
#ifdef OS_IS_WIN32
|
#ifdef OS_IS_WIN32
|
||||||
if ((process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid)) != NULL) {
|
if ((process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid)) != NULL) {
|
||||||
|
|
@ -161,17 +158,16 @@ int pa_pid_file_create(void) {
|
||||||
#else
|
#else
|
||||||
if (kill(pid, 0) >= 0 || errno != ESRCH) {
|
if (kill(pid, 0) >= 0 || errno != ESRCH) {
|
||||||
#endif
|
#endif
|
||||||
pa_log("daemon already running.");
|
pa_log("Daemon already running.");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_log("stale PID file, overwriting.");
|
pa_log_warn("Stale PID file, overwriting.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Overwrite the current PID file */
|
/* Overwrite the current PID file */
|
||||||
if (lseek(fd, 0, SEEK_SET) == (off_t) -1 || ftruncate(fd, 0) < 0) {
|
if (lseek(fd, 0, SEEK_SET) == (off_t) -1 || ftruncate(fd, 0) < 0) {
|
||||||
pa_log("failed to truncate PID file '%s': %s",
|
pa_log("Failed to truncate PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -179,7 +175,7 @@ int pa_pid_file_create(void) {
|
||||||
l = strlen(t);
|
l = strlen(t);
|
||||||
|
|
||||||
if (pa_loop_write(fd, t, l, NULL) != (ssize_t) l) {
|
if (pa_loop_write(fd, t, l, NULL) != (ssize_t) l) {
|
||||||
pa_log("failed to write PID file.");
|
pa_log("Failed to write PID file.");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -188,7 +184,11 @@ int pa_pid_file_create(void) {
|
||||||
fail:
|
fail:
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
close(fd);
|
|
||||||
|
if (pa_close(fd) < 0) {
|
||||||
|
pa_log("Failed to close PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -213,13 +213,12 @@ int pa_pid_file_remove(void) {
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (pid != getpid()) {
|
if (pid != getpid()) {
|
||||||
pa_log("WARNING: PID file '%s' not mine!", fn);
|
pa_log("PID file '%s' not mine!", fn);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ftruncate(fd, 0) < 0) {
|
if (ftruncate(fd, 0) < 0) {
|
||||||
pa_log_warn("WARNING: failed to truncate PID file '%s': %s",
|
pa_log_warn("Failed to truncate PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -230,8 +229,7 @@ int pa_pid_file_remove(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (unlink(fn) < 0) {
|
if (unlink(fn) < 0) {
|
||||||
pa_log_warn("WARNING: failed to remove PID file '%s': %s",
|
pa_log_warn("Failed to remove PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
fn, pa_cstrerror(errno));
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -241,7 +239,11 @@ fail:
|
||||||
|
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
pa_assert_se(close(fd) == 0);
|
|
||||||
|
if (pa_close(fd) < 0) {
|
||||||
|
pa_log_warn("Failed to close PID file '%s': %s", fn, pa_cstrerror(errno));
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -283,7 +285,7 @@ fail:
|
||||||
|
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
pa_lock_fd(fd, 0);
|
pa_lock_fd(fd, 0);
|
||||||
pa_assert_se(close(fd) == 0);
|
pa_close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ static int random_proper(void *ret_data, size_t length) {
|
||||||
if ((r = pa_loop_read(fd, ret_data, length, NULL)) < 0 || (size_t) r != length)
|
if ((r = pa_loop_read(fd, ret_data, length, NULL)) < 0 || (size_t) r != length)
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
} else
|
} else
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ int pa_shm_create_rw(pa_shm *m, size_t size, int shared, mode_t mode) {
|
||||||
pa_atomic_store(&marker->pid, (int) getpid());
|
pa_atomic_store(&marker->pid, (int) getpid());
|
||||||
pa_atomic_store(&marker->marker, SHM_MARKER);
|
pa_atomic_store(&marker->marker, SHM_MARKER);
|
||||||
|
|
||||||
close(fd);
|
pa_assert_se(close(fd) == 0);
|
||||||
m->do_unlink = 1;
|
m->do_unlink = 1;
|
||||||
#else
|
#else
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -170,7 +170,7 @@ fail:
|
||||||
#ifdef HAVE_SHM_OPEN
|
#ifdef HAVE_SHM_OPEN
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
shm_unlink(fn);
|
shm_unlink(fn);
|
||||||
pa_assert_se(close(fd) >= 0);
|
pa_close(fd);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -297,13 +297,13 @@ int pa_shm_attach_ro(pa_shm *m, unsigned id) {
|
||||||
m->do_unlink = 0;
|
m->do_unlink = 0;
|
||||||
m->shared = 1;
|
m->shared = 1;
|
||||||
|
|
||||||
pa_assert_se(close(fd) >= 0);
|
pa_assert_se(pa_close(fd) == 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (fd >= 0)
|
if (fd >= 0)
|
||||||
pa_assert_se(close(fd) >= 0);
|
pa_close(fd);
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
#include <pulsecore/sink-input.h>
|
#include <pulsecore/sink-input.h>
|
||||||
#include <pulsecore/log.h>
|
#include <pulsecore/log.h>
|
||||||
#include <pulsecore/thread-mq.h>
|
#include <pulsecore/thread-mq.h>
|
||||||
|
#include <pulsecore/core-util.h>
|
||||||
|
|
||||||
#include "sound-file-stream.h"
|
#include "sound-file-stream.h"
|
||||||
|
|
||||||
|
|
@ -271,7 +272,7 @@ int pa_play_file(
|
||||||
|
|
||||||
if (!(u->sndfile = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) {
|
if (!(u->sndfile = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) {
|
||||||
pa_log("Failed to open file %s", fname);
|
pa_log("Failed to open file %s", fname);
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@
|
||||||
#include <pulsecore/log.h>
|
#include <pulsecore/log.h>
|
||||||
#include <pulsecore/macro.h>
|
#include <pulsecore/macro.h>
|
||||||
#include <pulsecore/core-error.h>
|
#include <pulsecore/core-error.h>
|
||||||
|
#include <pulsecore/core-util.h>
|
||||||
|
|
||||||
#include "sound-file.h"
|
#include "sound-file.h"
|
||||||
#include "core-scache.h"
|
#include "core-scache.h"
|
||||||
|
|
@ -77,7 +78,7 @@ int pa_sound_file_load(
|
||||||
|
|
||||||
if (!(sf = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) {
|
if (!(sf = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) {
|
||||||
pa_log("Failed to open file %s", fname);
|
pa_log("Failed to open file %s", fname);
|
||||||
close(fd);
|
pa_close(fd);
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue