diff options
author | Daniel Colascione <dancol@dancol.org> | 2012-09-17 04:07:36 -0800 |
---|---|---|
committer | Daniel Colascione <dancol@dancol.org> | 2012-09-17 04:07:36 -0800 |
commit | 2ab329f3b5d52a39f0a45c3d9c129f1c19560142 (patch) | |
tree | 6dd6784d63e54cb18071df8e28fbdbc27d418728 /src/sound.c | |
parent | f701ab72dd55460d23c8b029550aa4d7ecef3cfa (diff) | |
parent | bb7dce392f6d9d5fc4b9d7de09ff920a52f07669 (diff) | |
download | emacs-2ab329f3b5d52a39f0a45c3d9c129f1c19560142.tar.gz |
Merge from trunk
Diffstat (limited to 'src/sound.c')
-rw-r--r-- | src/sound.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/sound.c b/src/sound.c index 403f08240ce..0ee85312fd3 100644 --- a/src/sound.c +++ b/src/sound.c @@ -44,11 +44,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #include <unistd.h> #include <sys/types.h> #include <errno.h> -#include <setjmp.h> + #include "lisp.h" #include "dispextern.h" #include "atimer.h" -#include <signal.h> #include "syssignal.h" /* END: Common Includes */ @@ -315,8 +314,13 @@ sound_perror (const char *msg) int saved_errno = errno; turn_on_atimers (1); -#ifdef SIGIO - sigunblock (sigmask (SIGIO)); +#ifdef USABLE_SIGIO + { + sigset_t unblocked; + sigemptyset (&unblocked); + sigaddset (&unblocked, SIGIO); + pthread_sigmask (SIG_UNBLOCK, &unblocked, 0); + } #endif if (saved_errno != 0) error ("%s: %s", msg, strerror (saved_errno)); @@ -728,6 +732,9 @@ static void vox_configure (struct sound_device *sd) { int val; +#ifdef USABLE_SIGIO + sigset_t blocked; +#endif eassert (sd->fd >= 0); @@ -735,8 +742,10 @@ vox_configure (struct sound_device *sd) interrupted by a signal. Block the ones we know to cause troubles. */ turn_on_atimers (0); -#ifdef SIGIO - sigblock (sigmask (SIGIO)); +#ifdef USABLE_SIGIO + sigemptyset (&blocked); + sigaddset (&blocked, SIGIO); + pthread_sigmask (SIG_BLOCK, &blocked, 0); #endif val = sd->format; @@ -769,8 +778,8 @@ vox_configure (struct sound_device *sd) } turn_on_atimers (1); -#ifdef SIGIO - sigunblock (sigmask (SIGIO)); +#ifdef USABLE_SIGIO + pthread_sigmask (SIG_UNBLOCK, &blocked, 0); #endif } @@ -785,8 +794,11 @@ vox_close (struct sound_device *sd) /* On GNU/Linux, it seems that the device driver doesn't like to be interrupted by a signal. Block the ones we know to cause troubles. */ -#ifdef SIGIO - sigblock (sigmask (SIGIO)); +#ifdef USABLE_SIGIO + sigset_t blocked; + sigemptyset (&blocked); + sigaddset (&blocked, SIGIO); + pthread_sigmask (SIG_BLOCK, &blocked, 0); #endif turn_on_atimers (0); @@ -794,8 +806,8 @@ vox_close (struct sound_device *sd) ioctl (sd->fd, SNDCTL_DSP_SYNC, NULL); turn_on_atimers (1); -#ifdef SIGIO - sigunblock (sigmask (SIGIO)); +#ifdef USABLE_SIGIO + pthread_sigmask (SIG_UNBLOCK, &blocked, 0); #endif /* Close the device. */ @@ -843,7 +855,7 @@ vox_choose_format (struct sound_device *sd, struct sound *s) } } else - abort (); + emacs_abort (); } @@ -1138,7 +1150,7 @@ alsa_choose_format (struct sound_device *sd, struct sound *s) } } else - abort (); + emacs_abort (); } |