Commit bb6e8cee authored by Gerd Moellmann's avatar Gerd Moellmann
Browse files

(toplevel): Include <signal.h> and "syssignal.h".

(vox_configure, vox_close) [SIGIO]: Block/unblock SIGIO
around ioctls.
parent 4033ae9d
2001-07-09 Gerd Moellmann <gerd@gnu.org>
* sound.c (toplevel): Include <signal.h> and "syssignal.h".
(vox_configure, vox_close) [SIGIO]: Block/unblock SIGIO
around ioctls.
2001-07-06 Eli Zaretskii <eliz@is.elta.co.il>
* dosfns.c (syms_of_dosfns): Add \n\ at the end of a line in the
......
......@@ -32,6 +32,8 @@ Boston, MA 02111-1307, USA. */
#include "lisp.h"
#include "dispextern.h"
#include "atimer.h"
#include <signal.h>
#include "syssignal.h"
/* FreeBSD has machine/soundcard.h. Voxware sound driver docs mention
sys/soundcard.h. So, let's try whatever's there. */
......@@ -765,7 +767,13 @@ vox_configure (sd)
xassert (sd->fd >= 0);
/* 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. */
turn_on_atimers (0);
#ifdef SIGIO
sigblock (sigmask (SIGIO));
#endif
val = sd->format;
if (ioctl (sd->fd, SNDCTL_DSP_SETFMT, &sd->format) < 0
......@@ -796,6 +804,9 @@ vox_configure (sd)
}
turn_on_atimers (1);
#ifdef SIGIO
sigunblock (sigmask (SIGIO));
#endif
}
......@@ -807,10 +818,21 @@ vox_close (sd)
{
if (sd->fd >= 0)
{
/* Flush sound data, and reset the device. */
/* 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));
#endif
turn_on_atimers (0);
/* Flush sound data, and reset the device. */
ioctl (sd->fd, SNDCTL_DSP_SYNC, NULL);
turn_on_atimers (1);
#ifdef SIGIO
sigunblock (sigmask (SIGIO));
#endif
/* Close the device. */
emacs_close (sd->fd);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment