diff options
author | Lennart Poettering <lennart@poettering.net> | 2007-09-12 00:04:21 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2007-09-12 00:04:21 +0000 |
commit | 7f92542420ef6085b6f090954052266cc70af8a1 (patch) | |
tree | 86640b0497bf7f34c0c7df5b6c36bdf6ec78adea | |
parent | 54506ab44a9ac61e79b3a5c632db56bde41beded (diff) |
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
-rw-r--r-- | src/daemon/cpulimit.c | 4 | ||||
-rw-r--r-- | src/daemon/main.c | 16 | ||||
-rw-r--r-- | src/modules/module-esound-compat-spawnfd.c | 2 | ||||
-rw-r--r-- | src/modules/module-mmkbd-evdev.c | 2 | ||||
-rw-r--r-- | src/modules/module-oss.c | 8 | ||||
-rw-r--r-- | src/modules/module-pipe-sink.c | 2 | ||||
-rw-r--r-- | src/modules/module-pipe-source.c | 2 | ||||
-rw-r--r-- | src/modules/oss-util.c | 4 | ||||
-rw-r--r-- | src/pulse/context.c | 8 | ||||
-rw-r--r-- | src/pulse/mainloop.c | 4 | ||||
-rw-r--r-- | src/pulsecore/authkey.c | 10 | ||||
-rw-r--r-- | src/pulsecore/core-util.c | 36 | ||||
-rw-r--r-- | src/pulsecore/fdsem.c | 4 | ||||
-rw-r--r-- | src/pulsecore/pid.c | 52 | ||||
-rw-r--r-- | src/pulsecore/random.c | 2 | ||||
-rw-r--r-- | src/pulsecore/shm.c | 8 | ||||
-rw-r--r-- | src/pulsecore/sound-file-stream.c | 3 | ||||
-rw-r--r-- | src/pulsecore/sound-file.c | 3 |
18 files changed, 89 insertions, 81 deletions
diff --git a/src/daemon/cpulimit.c b/src/daemon/cpulimit.c index 37f7976b..4f0adc06 100644 --- a/src/daemon/cpulimit.c +++ b/src/daemon/cpulimit.c @@ -223,9 +223,9 @@ void pa_cpu_limit_done(void) { } if (the_pipe[0] >= 0) - close(the_pipe[0]); + pa_assert_se(pa_close(the_pipe[0]) == 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; if (installed) { diff --git a/src/daemon/main.c b/src/daemon/main.c index 4509e7f9..0bbddffa 100644 --- a/src/daemon/main.c +++ b/src/daemon/main.c @@ -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]) { if (p[0] != -1) - close(p[0]); + pa_assert_se(pa_close(p[0]) == 0); if (p[1] != -1) - close(p[1]); + pa_assert_se(pa_close(p[1]) == 0); p[0] = p[1] = -1; } @@ -537,7 +537,7 @@ int main(int argc, char *argv[]) { if (child != 0) { /* Father */ - close(daemon_pipe[1]); + pa_assert_se(pa_close(daemon_pipe[1]) == 0); daemon_pipe[1] = -1; 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; } - close(daemon_pipe[0]); + pa_assert_se(pa_close(daemon_pipe[0]) == 0); daemon_pipe[0] = -1; #endif @@ -568,9 +568,9 @@ int main(int argc, char *argv[]) { #endif #ifndef OS_IS_WIN32 - close(0); - close(1); - close(2); + pa_close(0); + pa_close(1); + pa_close(2); open("/dev/null", O_RDONLY); open("/dev/null", O_WRONLY); @@ -592,7 +592,7 @@ int main(int argc, char *argv[]) { #ifdef TIOCNOTTY if ((tty_fd = open("/dev/tty", O_RDWR)) >= 0) { ioctl(tty_fd, TIOCNOTTY, (char*) 0); - close(tty_fd); + pa_assert_se(pa_close(tty_fd) == 0); } #endif } diff --git a/src/modules/module-esound-compat-spawnfd.c b/src/modules/module-esound-compat-spawnfd.c index 890ebb16..46235c09 100644 --- a/src/modules/module-esound-compat-spawnfd.c +++ b/src/modules/module-esound-compat-spawnfd.c @@ -65,7 +65,7 @@ int pa__init(pa_module*m) { 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)); - close(fd); + pa_assert_se(pa_close(fd) == 0); pa_module_unload_request(m); diff --git a/src/modules/module-mmkbd-evdev.c b/src/modules/module-mmkbd-evdev.c index 03394c0a..dc0b1c1a 100644 --- a/src/modules/module-mmkbd-evdev.c +++ b/src/modules/module-mmkbd-evdev.c @@ -254,7 +254,7 @@ void pa__done(pa_module*m) { m->core->mainloop->io_free(u->io); if (u->fd >= 0) - close(u->fd); + pa_assert_se(pa_close(u->fd) == 0); pa_xfree(u->sink_name); pa_xfree(u); diff --git a/src/modules/module-oss.c b/src/modules/module-oss.c index 9273a393..ffecd394 100644 --- a/src/modules/module-oss.c +++ b/src/modules/module-oss.c @@ -476,7 +476,7 @@ static int suspend(struct userdata *u) { /* Let's suspend */ ioctl(u->fd, SNDCTL_DSP_SYNC, NULL); - close(u->fd); + pa_close(u->fd); u->fd = -1; if (u->rtpoll_item) { @@ -588,7 +588,7 @@ static int unsuspend(struct userdata *u) { return 0; fail: - close(u->fd); + pa_close(u->fd); u->fd = -1; return -1; } @@ -1324,7 +1324,7 @@ fail: if (u) pa__done(m); else if (fd >= 0) - close(fd); + pa_close(fd); if (ma) pa_modargs_free(ma); @@ -1391,7 +1391,7 @@ void pa__done(pa_module*m) { munmap(u->out_mmap, u->out_hwbuf_size); if (u->fd >= 0) - close(u->fd); + pa_close(u->fd); pa_xfree(u->device_name); diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c index 5cafaada..61454261 100644 --- a/src/modules/module-pipe-sink.c +++ b/src/modules/module-pipe-sink.c @@ -335,7 +335,7 @@ void pa__done(pa_module*m) { } if (u->fd >= 0) - close(u->fd); + pa_assert_se(pa_close(u->fd) == 0); pa_xfree(u); } diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c index 291010e1..68c89a0d 100644 --- a/src/modules/module-pipe-source.c +++ b/src/modules/module-pipe-source.c @@ -313,7 +313,7 @@ void pa__done(pa_module*m) { } if (u->fd >= 0) - close(u->fd); + pa_assert_se(pa_close(u->fd) == 0); pa_xfree(u); } diff --git a/src/modules/oss-util.c b/src/modules/oss-util.c index 5a939cf8..36498809 100644 --- a/src/modules/oss-util.c +++ b/src/modules/oss-util.c @@ -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); - close(fd); + pa_close(fd); } if ((fd = open(device, (*mode = O_WRONLY)|O_NDELAY|O_NOCTTY)) < 0) { @@ -147,7 +147,7 @@ success: fail: if (fd >= 0) - close(fd); + pa_close(fd); return -1; } diff --git a/src/pulse/context.c b/src/pulse/context.c index ab06aeb9..1ed250f9 100644 --- a/src/pulse/context.c +++ b/src/pulse/context.c @@ -524,7 +524,7 @@ static int context_connect_spawn(pa_context *c) { int n; /* 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) c->spawn_api.atfork(); @@ -571,7 +571,7 @@ static int context_connect_spawn(pa_context *c) { goto fail; } - close(fds[1]); + pa_assert_se(pa_close(fds[1]) == 0); c->is_local = 1; @@ -586,9 +586,9 @@ static int context_connect_spawn(pa_context *c) { fail: if (fds[0] != -1) - close(fds[0]); + pa_assert_se(pa_close(fds[0]) == 0); if (fds[1] != -1) - close(fds[1]); + pa_assert_se(pa_close(fds[1]) == 0); unlock_autospawn_lock_file(c); diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c index 419b74d6..fc373d97 100644 --- a/src/pulse/mainloop.c +++ b/src/pulse/mainloop.c @@ -606,9 +606,9 @@ void pa_mainloop_free(pa_mainloop* m) { pa_xfree(m->pollfds); 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) - close(m->wakeup_pipe[1]); + pa_assert_se(pa_close(m->wakeup_pipe[1]) == 0); pa_xfree(m); } diff --git a/src/pulsecore/authkey.c b/src/pulsecore/authkey.c index d8056247..4d9bfd3a 100644 --- a/src/pulsecore/authkey.c +++ b/src/pulsecore/authkey.c @@ -120,7 +120,10 @@ finish: if (unlock) 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; @@ -221,7 +224,10 @@ finish: if (unlock) 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; diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index c0dd0d68..62a63761 100644 --- a/src/pulsecore/core-util.c +++ b/src/pulsecore/core-util.c @@ -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 * systems treat all file descriptors equal. */ int pa_close(int fd) { + #ifdef OS_IS_WIN32 int ret; - ret = closesocket(fd); - if (ret == 0) + if ((ret = closesocket(fd)) == 0) return 0; if (WSAGetLastError() != WSAENOTSOCK) { @@ -838,8 +838,7 @@ int pa_lock_fd(int fd, int b) { return 0; } - pa_log("%slock: %s", !b? "un" : "", - pa_cstrerror(errno)); + pa_log("%slock: %s", !b? "un" : "", pa_cstrerror(errno)); #endif #ifdef OS_IS_WIN32 @@ -873,32 +872,33 @@ int pa_lock_lockfile(const char *fn) { struct stat st; if ((fd = open(fn, O_CREAT|O_RDWR, S_IRUSR|S_IWUSR)) < 0) { - pa_log("failed to create lock file '%s': %s", fn, - pa_cstrerror(errno)); + pa_log_warn("Failed to create lock file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } 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; } 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; } - /* 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) break; 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; } - if (close(fd) < 0) { - pa_log("failed to close file '%s'.", fn); + if (pa_close(fd) < 0) { + pa_log_warn("Failed to close file '%s': %s", fn, pa_cstrerror(errno)); + fd = -1; goto fail; } @@ -910,7 +910,7 @@ int pa_lock_lockfile(const char *fn) { fail: if (fd >= 0) - close(fd); + pa_close(fd); return -1; } @@ -922,19 +922,17 @@ int pa_unlock_lockfile(const char *fn, int fd) { pa_assert(fd >= 0); if (unlink(fn) < 0) { - pa_log_warn("WARNING: unable to remove lock file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("Unable to remove lock file '%s': %s", fn, pa_cstrerror(errno)); r = -1; } 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; } - if (close(fd) < 0) { - pa_log_warn("WARNING: failed to close lock file '%s': %s", - fn, pa_cstrerror(errno)); + if (pa_close(fd) < 0) { + pa_log_warn("Failed to close '%s': %s", fn, pa_cstrerror(errno)); r = -1; } diff --git a/src/pulsecore/fdsem.c b/src/pulsecore/fdsem.c index 5a358e2b..710a74f5 100644 --- a/src/pulsecore/fdsem.c +++ b/src/pulsecore/fdsem.c @@ -67,8 +67,8 @@ pa_fdsem *pa_fdsem_new(void) { void pa_fdsem_free(pa_fdsem *f) { pa_assert(f); - close(f->fds[0]); - close(f->fds[1]); + pa_assert_se(pa_close(f->fds[0]) == 0); + pa_assert_se(pa_close(f->fds[1]) == 0); pa_xfree(f); } diff --git a/src/pulsecore/pid.c b/src/pulsecore/pid.c index 22ceae89..6bc9f06a 100644 --- a/src/pulsecore/pid.c +++ b/src/pulsecore/pid.c @@ -61,8 +61,7 @@ static pid_t read_pid(const char *fn, int fd) { pa_assert(fd >= 0); if ((r = pa_loop_read(fd, t, sizeof(t)-1, NULL)) < 0) { - pa_log_warn("WARNING: failed to read PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("Failed to read PID file '%s': %s", fn, pa_cstrerror(errno)); return (pid_t) -1; } @@ -74,7 +73,7 @@ static pid_t read_pid(const char *fn, int fd) { *e = 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; } @@ -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 (mode != O_RDONLY || errno != ENOENT) - pa_log_warn("WARNING: failed to open PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("WARNING: failed to open PID file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } @@ -101,8 +99,7 @@ static int open_pid_file(const char *fn, int mode) { goto fail; if (fstat(fd, &st) < 0) { - pa_log_warn("WARNING: failed to fstat() PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("Failed to fstat() PID file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } @@ -113,9 +110,9 @@ static int open_pid_file(const char *fn, int mode) { if (pa_lock_fd(fd, 0) < 0) goto fail; - if (close(fd) < 0) { - pa_log_warn("WARNING: failed to close file '%s': %s", - fn, pa_cstrerror(errno)); + if (pa_close(fd) < 0) { + pa_log_warn("Failed to close file '%s': %s", fn, pa_cstrerror(errno)); + fd = -1; goto fail; } @@ -128,7 +125,7 @@ fail: if (fd >= 0) { pa_lock_fd(fd, 0); - close(fd); + pa_close(fd); } return -1; @@ -153,7 +150,7 @@ int pa_pid_file_create(void) { goto fail; 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) { #ifdef OS_IS_WIN32 if ((process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid)) != NULL) { @@ -161,17 +158,16 @@ int pa_pid_file_create(void) { #else if (kill(pid, 0) >= 0 || errno != ESRCH) { #endif - pa_log("daemon already running."); + pa_log("Daemon already running."); goto fail; } - pa_log("stale PID file, overwriting."); + pa_log_warn("Stale PID file, overwriting."); } /* Overwrite the current PID file */ if (lseek(fd, 0, SEEK_SET) == (off_t) -1 || ftruncate(fd, 0) < 0) { - pa_log("failed to truncate PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log("Failed to truncate PID file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } @@ -179,7 +175,7 @@ int pa_pid_file_create(void) { l = strlen(t); 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; } @@ -188,7 +184,11 @@ int pa_pid_file_create(void) { fail: if (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; @@ -213,13 +213,12 @@ int pa_pid_file_remove(void) { goto fail; if (pid != getpid()) { - pa_log("WARNING: PID file '%s' not mine!", fn); + pa_log("PID file '%s' not mine!", fn); goto fail; } if (ftruncate(fd, 0) < 0) { - pa_log_warn("WARNING: failed to truncate PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("Failed to truncate PID file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } @@ -230,8 +229,7 @@ int pa_pid_file_remove(void) { #endif if (unlink(fn) < 0) { - pa_log_warn("WARNING: failed to remove PID file '%s': %s", - fn, pa_cstrerror(errno)); + pa_log_warn("Failed to remove PID file '%s': %s", fn, pa_cstrerror(errno)); goto fail; } @@ -241,7 +239,11 @@ fail: if (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; @@ -283,7 +285,7 @@ fail: if (fd >= 0) { pa_lock_fd(fd, 0); - pa_assert_se(close(fd) == 0); + pa_close(fd); } return ret; diff --git a/src/pulsecore/random.c b/src/pulsecore/random.c index b0b4926c..87afebfa 100644 --- a/src/pulsecore/random.c +++ b/src/pulsecore/random.c @@ -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) ret = -1; - close(fd); + pa_close(fd); } else ret = -1; diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c index f17d9460..02f6a7bd 100644 --- a/src/pulsecore/shm.c +++ b/src/pulsecore/shm.c @@ -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->marker, SHM_MARKER); - close(fd); + pa_assert_se(close(fd) == 0); m->do_unlink = 1; #else return -1; @@ -170,7 +170,7 @@ fail: #ifdef HAVE_SHM_OPEN if (fd >= 0) { shm_unlink(fn); - pa_assert_se(close(fd) >= 0); + pa_close(fd); } #endif @@ -297,13 +297,13 @@ int pa_shm_attach_ro(pa_shm *m, unsigned id) { m->do_unlink = 0; m->shared = 1; - pa_assert_se(close(fd) >= 0); + pa_assert_se(pa_close(fd) == 0); return 0; fail: if (fd >= 0) - pa_assert_se(close(fd) >= 0); + pa_close(fd); return -1; } diff --git a/src/pulsecore/sound-file-stream.c b/src/pulsecore/sound-file-stream.c index d5523a64..8a04b821 100644 --- a/src/pulsecore/sound-file-stream.c +++ b/src/pulsecore/sound-file-stream.c @@ -40,6 +40,7 @@ #include <pulsecore/sink-input.h> #include <pulsecore/log.h> #include <pulsecore/thread-mq.h> +#include <pulsecore/core-util.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))) { pa_log("Failed to open file %s", fname); - close(fd); + pa_close(fd); goto fail; } diff --git a/src/pulsecore/sound-file.c b/src/pulsecore/sound-file.c index 8727ba15..b1c509f2 100644 --- a/src/pulsecore/sound-file.c +++ b/src/pulsecore/sound-file.c @@ -36,6 +36,7 @@ #include <pulsecore/log.h> #include <pulsecore/macro.h> #include <pulsecore/core-error.h> +#include <pulsecore/core-util.h> #include "sound-file.h" #include "core-scache.h" @@ -77,7 +78,7 @@ int pa_sound_file_load( if (!(sf = sf_open_fd(fd, SFM_READ, &sfinfo, 1))) { pa_log("Failed to open file %s", fname); - close(fd); + pa_close(fd); goto finish; } |