Mercurial > sdl-ios-xcode
changeset 3068:b21348d47cab
Fixed bug #633
Description From Michael Stone 2008-09-25 19:27:29 (-) [reply]
To determine whether a pid is occupied with the kill(pid, 0) idiom, you have to
test
#include <signal.h>
#include <errno.h>
kill(pid, 0) < 0 && errno == ESRCH
not just
#include <signal.h>
kill(pid, 0) < 0
otherwise you get incorrect results when pid is running as a different user
(causing kill(pid, 0) to return -1 + EPERM).
src/audio/alsa/SDL_alsa_audio.c is certainly affected by this bug in both
1.2.13 and 1.3-trunk. It probably occurs in other places as well.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 17 Feb 2009 05:17:51 +0000 |
parents | bcd41b269091 |
children | caefe2344f65 |
files | src/audio/alsa/SDL_alsa_audio.c src/audio/arts/SDL_artsaudio.c src/audio/dma/SDL_dmaaudio.c src/audio/esd/SDL_esdaudio.c src/audio/pulseaudio/SDL_pulseaudio.c |
diffstat | 5 files changed, 6 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/audio/alsa/SDL_alsa_audio.c Tue Feb 17 04:57:39 2009 +0000 +++ b/src/audio/alsa/SDL_alsa_audio.c Tue Feb 17 05:17:51 2009 +0000 @@ -230,7 +230,7 @@ */ /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { - if (kill(this->hidden->parent, 0) < 0) { + if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { this->enabled = 0; } }
--- a/src/audio/arts/SDL_artsaudio.c Tue Feb 17 04:57:39 2009 +0000 +++ b/src/audio/arts/SDL_artsaudio.c Tue Feb 17 05:17:51 2009 +0000 @@ -27,6 +27,7 @@ #include <signal.h> #endif #include <unistd.h> +#include <errno.h> #include "SDL_timer.h" #include "SDL_audio.h" @@ -149,7 +150,7 @@ */ /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { - if (kill(this->hidden->parent, 0) < 0) { + if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { this->enabled = 0; } }
--- a/src/audio/dma/SDL_dmaaudio.c Tue Feb 17 04:57:39 2009 +0000 +++ b/src/audio/dma/SDL_dmaaudio.c Tue Feb 17 05:17:51 2009 +0000 @@ -417,7 +417,7 @@ that use a different process id for each thread. */ if (parent && (((++cnt) % 10) == 0)) { /* Check every 10 loops */ - if (kill(parent, 0) < 0) { + if (kill(parent, 0) < 0 && errno == ESRCH) { this->enabled = 0; } }
--- a/src/audio/esd/SDL_esdaudio.c Tue Feb 17 04:57:39 2009 +0000 +++ b/src/audio/esd/SDL_esdaudio.c Tue Feb 17 05:17:51 2009 +0000 @@ -128,7 +128,7 @@ */ /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { - if (kill(this->hidden->parent, 0) < 0) { + if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { this->enabled = 0; } }
--- a/src/audio/pulseaudio/SDL_pulseaudio.c Tue Feb 17 04:57:39 2009 +0000 +++ b/src/audio/pulseaudio/SDL_pulseaudio.c Tue Feb 17 05:17:51 2009 +0000 @@ -165,7 +165,7 @@ */ /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { - if (kill(this->hidden->parent, 0) < 0) { + if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { this->enabled = 0; } }