Commit 6a5a4e60 authored by Keith Packard's avatar Keith Packard

Remove SIGIO support for input [v5]

This removes all of the SIGIO handling support used for input
throughout the X server, preparing the way for using threads for input
handling instead.

Places calling OsBlockSIGIO and OsReleaseSIGIO are marked with calls
to stub functions input_lock/input_unlock so that we don't lose this
information.

xfree86 SIGIO support is reworked to use internal versions of
OsBlockSIGIO and OsReleaseSIGIO.

v2: Don't change locking order (Peter Hutterer)
v3: Comment weird && FALSE in xf86Helper.c
    Leave errno save/restore in xf86ReadInput
    Squash with stub adding patch (Peter Hutterer)
v4: Leave UseSIGIO config parameter so that
    existing config files don't break (Peter Hutterer)
v5: Split a couple of independent patch bits out
    of kinput.c (Peter Hutterer)
Signed-off-by: 's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: 's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent 8cf832c2
......@@ -661,7 +661,7 @@ void
DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to,
DeviceChangedEvent *dce)
{
OsBlockSIGIO();
input_lock();
/* generic feedback classes, not tied to pointer and/or keyboard */
DeepCopyFeedbackClasses(from, to);
......@@ -671,7 +671,7 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to,
if ((dce->flags & DEVCHANGE_POINTER_EVENT))
DeepCopyPointerClasses(from, to);
OsReleaseSIGIO();
input_unlock();
}
/**
......
......@@ -86,10 +86,10 @@ remove_device(const char *backend, DeviceIntPtr dev)
/* Call PIE here so we don't try to dereference a device that's
* already been removed. */
OsBlockSignals();
input_lock();
ProcessInputEvents();
DeleteInputDeviceRequest(dev);
OsReleaseSignals();
input_unlock();
}
void
......
......@@ -381,7 +381,6 @@ AM_CONDITIONAL(PPC_VIDEO, [test "x$PPC_VIDEO" = xyes])
AM_CONDITIONAL(SPARC64_VIDEO, [test "x$SPARC64_VIDEO" = xyes])
DRI=no
USE_SIGIO_BY_DEFAULT="yes"
dnl it would be nice to autodetect these *CONS_SUPPORTs
case $host_os in
*freebsd* | *dragonfly*)
......@@ -411,9 +410,6 @@ case $host_os in
;;
*solaris*)
PKG_CHECK_EXISTS(libdrm, DRI=yes, DRI=no)
# Disable use of SIGIO by default until some system bugs are
# fixed - see Sun/OpenSolaris bug id 6879897
USE_SIGIO_BY_DEFAULT="no"
;;
darwin*)
AC_DEFINE(CSRG_BASED, 1, [System is BSD-like])
......@@ -446,9 +442,6 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror],
AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],
[Enable debugging (default: disabled)]),
[DEBUGGING=$enableval], [DEBUGGING=no])
AC_ARG_ENABLE(use-sigio-by-default, AS_HELP_STRING([--enable-use-sigio-by-default]
[Enable SIGIO input handlers by default (default: $USE_SIGIO_BY_DEFAULT)]),
[USE_SIGIO_BY_DEFAULT=$enableval], [])
AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]),
[INT10="$withval"],
[INT10="$DEFAULT_INT10"])
......@@ -967,13 +960,6 @@ if test "x$CONFIG_WSCONS" = xyes; then
AC_DEFINE(CONFIG_WSCONS, 1, [Use wscons for input auto configuration])
fi
if test "x$USE_SIGIO_BY_DEFAULT" = xyes; then
USE_SIGIO_BY_DEFAULT_VALUE=TRUE
else
USE_SIGIO_BY_DEFAULT_VALUE=FALSE
fi
AC_DEFINE_UNQUOTED([USE_SIGIO_BY_DEFAULT], [$USE_SIGIO_BY_DEFAULT_VALUE],
[Use SIGIO handlers for input device events by default])
AC_MSG_CHECKING([for glibc...])
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
......
......@@ -493,14 +493,14 @@ DisableDevice(DeviceIntPtr dev, BOOL sendevent)
FreeSprite(dev);
/* now that the device is disabled, we can reset the signal handler's
/* now that the device is disabled, we can reset the event reader's
* last.slave */
OsBlockSignals();
input_lock();
for (other = inputInfo.devices; other; other = other->next) {
if (other->last.slave == dev)
other->last.slave = NULL;
}
OsReleaseSignals();
input_unlock();
LeaveWindow(dev);
SetFocusOut(dev);
......@@ -1033,7 +1033,7 @@ CloseDownDevices(void)
{
DeviceIntPtr dev;
OsBlockSignals();
input_lock();
/* Float all SDs before closing them. Note that at this point resources
* (e.g. cursors) have been freed already, so we can't just call
......@@ -1060,7 +1060,7 @@ CloseDownDevices(void)
XkbDeleteRulesDflts();
XkbDeleteRulesUsed();
OsReleaseSignals();
input_unlock();
}
/**
......
......@@ -165,7 +165,7 @@ AccelerationDefaultCleanup(DeviceIntPtr dev)
* AccelSchemeProc(), but that seems impossible. Schemes don't get
* switched often anyway.
*/
OsBlockSignals();
input_lock();
dev->valuator->accelScheme.AccelSchemeProc = NULL;
FreeVelocityData(vel);
free(vel);
......@@ -175,7 +175,7 @@ AccelerationDefaultCleanup(DeviceIntPtr dev)
accelData);
free(dev->valuator->accelScheme.accelData);
dev->valuator->accelScheme.accelData = NULL;
OsReleaseSignals();
input_unlock();
}
}
......
......@@ -79,7 +79,7 @@ TouchResizeQueue(ClientPtr client, void *closure)
{
int i;
OsBlockSignals();
input_lock();
/* first two ids are reserved */
for (i = 2; i < MAXDEVICES; i++) {
......@@ -112,7 +112,7 @@ TouchResizeQueue(ClientPtr client, void *closure)
}
}
OsReleaseSignals();
input_unlock();
return TRUE;
}
......@@ -1077,7 +1077,7 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
InternalEvent *eventlist = InitEventList(GetMaximumEventsNum());
int i;
OsBlockSignals();
input_lock();
mieqProcessInputEvents();
for (i = 0; i < dev->last.num_touches; i++) {
DDXTouchPointInfoPtr ddxti = dev->last.touches + i;
......@@ -1091,7 +1091,7 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
mieqProcessDeviceEvent(dev, eventlist + j, NULL);
}
}
OsReleaseSignals();
input_unlock();
FreeEventList(eventlist, GetMaximumEventsNum());
}
......
......@@ -227,25 +227,25 @@ dmxCoreMotion(DevicePtr pDev, int x, int y, int delta, DMXBlockType block)
&& pScreen->myNum == dmxScreen->index) {
/* Screen is old screen */
if (block)
OsBlockSIGIO();
input_lock();
if (pDev)
enqueueMotion(pDev, localX, localY);
if (block)
OsReleaseSIGIO();
input_unlock();
}
else {
/* Screen is new */
DMXDBG4(" New screen: old=%d new=%d localX=%d localY=%d\n",
pScreen->myNum, dmxScreen->index, localX, localY);
if (block)
OsBlockSIGIO();
input_lock();
mieqProcessInputEvents();
miPointerSetScreen(inputInfo.pointer, dmxScreen->index,
localX, localY);
if (pDev)
enqueueMotion(pDev, localX, localY);
if (block)
OsReleaseSIGIO();
input_unlock();
}
#if 00
miPointerGetPosition(inputInfo.pointer, &localX, &localY);
......@@ -387,12 +387,12 @@ dmxExtMotion(DMXLocalInputInfoPtr dmxLocal,
}
if (block)
OsBlockSIGIO();
input_lock();
valuator_mask_set_range(&mask, firstAxis, axesCount, v);
QueuePointerEvents(pDevice, MotionNotify, 0, POINTER_ABSOLUTE, &mask);
if (block)
OsReleaseSIGIO();
input_unlock();
}
static int
......@@ -489,10 +489,10 @@ dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
case XI_DeviceKeyPress:
case XI_DeviceKeyRelease:
if (block)
OsBlockSIGIO();
input_lock();
QueueKeyboardEvents(pDevice, event, ke->keycode);
if (block)
OsReleaseSIGIO();
input_unlock();
break;
case XI_DeviceButtonPress:
case XI_DeviceButtonRelease:
......@@ -500,11 +500,11 @@ dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
valuator_mask_set_range(&mask, ke->first_axis, ke->axes_count,
valuators);
if (block)
OsBlockSIGIO();
input_lock();
QueuePointerEvents(pDevice, event, ke->keycode,
POINTER_ABSOLUTE, &mask);
if (block)
OsReleaseSIGIO();
input_unlock();
break;
case XI_ProximityIn:
case XI_ProximityOut:
......@@ -512,10 +512,10 @@ dmxTranslateAndEnqueueExtEvent(DMXLocalInputInfoPtr dmxLocal,
valuator_mask_set_range(&mask, ke->first_axis, ke->axes_count,
valuators);
if (block)
OsBlockSIGIO();
input_lock();
QueueProximityEvents(pDevice, event, &mask);
if (block)
OsReleaseSIGIO();
input_unlock();
break;
break;
......
......@@ -818,11 +818,11 @@ ScreenPtr ephyrCursorScreen; /* screen containing the cursor */
static void
ephyrWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
{
OsBlockSIGIO();
input_lock();
ephyrCursorScreen = pScreen;
miPointerWarpCursor(inputInfo.pointer, pScreen, x, y);
OsReleaseSIGIO();
input_unlock();
}
miPointerScreenFuncRec ephyrPointerScreenFuncs = {
......
......@@ -108,38 +108,6 @@ extern const char *kdGlobalXkbLayout;
extern const char *kdGlobalXkbVariant;
extern const char *kdGlobalXkbOptions;
static void
KdSigio(int sig)
{
int i;
for (i = 0; i < kdNumInputFds; i++)
(*kdInputFds[i].read) (kdInputFds[i].fd, kdInputFds[i].closure);
}
#ifdef DEBUG_SIGIO
void
KdAssertSigioBlocked(char *where)
{
sigset_t set, old;
sigemptyset(&set);
sigprocmask(SIG_BLOCK, &set, &old);
if (!sigismember(&old, SIGIO)) {
ErrorF("SIGIO not blocked at %s\n", where);
KdBacktrace(0);
}
}
#else
#define KdAssertSigioBlocked(s)
#endif
static int kdnFds;
#ifdef FNONBLOCK
#define NOBLOCK FNONBLOCK
#else
......@@ -171,49 +139,27 @@ static void
KdNotifyFd(int fd, int ready, void *data)
{
int i = (int) (intptr_t) data;
OsBlockSIGIO();
input_lock();
(*kdInputFds[i].read)(fd, kdInputFds[i].closure);
OsReleaseSIGIO();
input_unlock();
}
static void
KdAddFd(int fd, int i)
{
struct sigaction act;
sigset_t set;
kdnFds++;
fcntl(fd, F_SETOWN, getpid());
KdNonBlockFd(fd);
SetNotifyFd(fd, KdNotifyFd, X_NOTIFY_READ, (void *) (intptr_t) i);
memset(&act, '\0', sizeof act);
act.sa_handler = KdSigio;
sigemptyset(&act.sa_mask);
sigaddset(&act.sa_mask, SIGIO);
sigaddset(&act.sa_mask, SIGALRM);
sigaddset(&act.sa_mask, SIGVTALRM);
sigaction(SIGIO, &act, 0);
sigemptyset(&set);
sigprocmask(SIG_SETMASK, &set, 0);
}
static void
KdRemoveFd(int fd)
{
struct sigaction act;
int flags;
kdnFds--;
RemoveNotifyFd(fd);
flags = fcntl(fd, F_GETFL);
flags &= ~(FASYNC | NOBLOCK);
fcntl(fd, F_SETFL, flags);
if (kdnFds == 0) {
memset(&act, '\0', sizeof act);
act.sa_handler = SIG_IGN;
sigemptyset(&act.sa_mask);
sigaction(SIGIO, &act, 0);
}
}
Bool
......@@ -265,7 +211,7 @@ KdDisableInput(void)
KdPointerInfo *pi;
int found = 0, i = 0;
OsBlockSIGIO();
input_lock();
for (ki = kdKeyboards; ki; ki = ki->next) {
if (ki->driver && ki->driver->Disable)
......@@ -348,7 +294,7 @@ KdEnableInput(void)
NoticeEventTime (&ev, pi->dixdev);
}
OsReleaseSIGIO();
input_unlock();
}
static KdKeyboardDriver *
......@@ -1850,7 +1796,7 @@ KdReleaseAllKeys(void)
int key;
KdKeyboardInfo *ki;
OsBlockSIGIO();
input_lock();
for (ki = kdKeyboards; ki; ki = ki->next) {
for (key = ki->keySyms.minKeyCode; key < ki->keySyms.maxKeyCode; key++) {
......@@ -1861,7 +1807,7 @@ KdReleaseAllKeys(void)
}
}
OsReleaseSIGIO();
input_unlock();
#endif
}
......@@ -2049,9 +1995,9 @@ KdWakeupHandler(ScreenPtr pScreen, unsigned long lresult, void *readmask)
if (pi->timeoutPending) {
if ((long) (GetTimeInMillis() - pi->emulationTimeout) >= 0) {
pi->timeoutPending = FALSE;
OsBlockSIGIO();
input_lock();
KdReceiveTimeout(pi);
OsReleaseSIGIO();
input_unlock();
}
}
}
......@@ -2148,10 +2094,10 @@ int KdCurScreen; /* current event screen */
static void
KdWarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
{
OsBlockSIGIO();
input_lock();
KdCurScreen = pScreen->myNum;
miPointerWarpCursor(pDev, pScreen, x, y);
OsReleaseSIGIO();
input_unlock();
}
miPointerScreenFuncRec kdPointerScreenFuncs = {
......
......@@ -807,27 +807,6 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
xf86Msg(X_CONFIG, "Ignoring ABI Version\n");
}
if (xf86SIGIOSupported()) {
xf86Info.useSIGIO =
xf86ReturnOptValBool(FlagOptions, FLAG_USE_SIGIO,
USE_SIGIO_BY_DEFAULT);
if (xf86IsOptionSet(FlagOptions, FLAG_USE_SIGIO)) {
from = X_CONFIG;
}
else {
from = X_DEFAULT;
}
if (!xf86Info.useSIGIO) {
xf86Msg(from, "Disabling SIGIO handlers for input devices\n");
}
else if (from == X_CONFIG) {
xf86Msg(from, "Enabling SIGIO handlers for input devices\n");
}
}
else {
xf86Info.useSIGIO = FALSE;
}
if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_ADD_DEVICES)) {
xf86GetOptValBool(FlagOptions, FLAG_AUTO_ADD_DEVICES,
&xf86Info.autoAddDevices);
......
......@@ -221,7 +221,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
if (pScreen == pCursorScreen)
miPointerGetPosition(dev, &px, &py);
OsBlockSIGIO();
input_lock();
Switched = (*pScr->SwitchMode) (pScr, mode);
if (Switched) {
pScr->currentMode = mode;
......@@ -260,7 +260,7 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
pScr->frameY1 = pScr->virtualY - 1;
}
}
OsReleaseSIGIO();
input_unlock();
if (pScr->AdjustFrame)
(*pScr->AdjustFrame) (pScr, pScr->frameX0, pScr->frameY0);
......@@ -452,11 +452,11 @@ xf86CrossScreen(ScreenPtr pScreen, Bool entering)
static void
xf86WarpCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
{
OsBlockSIGIO();
input_lock();
miPointerWarpCursor(pDev, pScreen, x, y);
xf86Info.currentScreen = pScreen;
OsReleaseSIGIO();
input_unlock();
}
void *
......
......@@ -259,7 +259,7 @@ xf86Wakeup(void *blockData, int err, void *pReadmask)
while (pInfo) {
if (pInfo->read_input && pInfo->fd >= 0 &&
(FD_ISSET(pInfo->fd, &devicesWithInput) != 0)) {
OsBlockSIGIO();
input_lock();
/*
* Remove the descriptior from the set because more than one
......@@ -268,7 +268,7 @@ xf86Wakeup(void *blockData, int err, void *pReadmask)
FD_CLR(pInfo->fd, &devicesWithInput);
pInfo->read_input(pInfo);
OsReleaseSIGIO();
input_unlock();
}
pInfo = pInfo->next;
}
......@@ -291,11 +291,12 @@ xf86Wakeup(void *blockData, int err, void *pReadmask)
}
/*
* xf86SigioReadInput --
* signal handler for the SIGIO signal.
* xf86ReadInput --
* input thread handler
*/
static void
xf86SigioReadInput(int fd, void *closure)
xf86ReadInput(int fd, int ready, void *closure)
{
int errno_save = errno;
InputInfoPtr pInfo = closure;
......@@ -312,9 +313,7 @@ xf86SigioReadInput(int fd, void *closure)
void
xf86AddEnabledDevice(InputInfoPtr pInfo)
{
if (!xf86InstallSIGIOHandler(pInfo->fd, xf86SigioReadInput, pInfo)) {
AddEnabledDevice(pInfo->fd);
}
SetNotifyFd(pInfo->fd, xf86ReadInput, X_NOTIFY_READ, pInfo);
}
/*
......@@ -324,9 +323,7 @@ xf86AddEnabledDevice(InputInfoPtr pInfo)
void
xf86RemoveEnabledDevice(InputInfoPtr pInfo)
{
if (!xf86RemoveSIGIOHandler(pInfo->fd)) {
RemoveEnabledDevice(pInfo->fd);
}
RemoveNotifyFd(pInfo->fd);
}
static int *xf86SignalIntercept = NULL;
......@@ -402,9 +399,9 @@ xf86ReleaseKeys(DeviceIntPtr pDev)
for (i = keyc->xkbInfo->desc->min_key_code;
i < keyc->xkbInfo->desc->max_key_code; i++) {
if (key_is_down(pDev, i, KEY_POSTED)) {
OsBlockSIGIO();
input_lock();
QueueKeyboardEvents(pDev, KeyRelease, i);
OsReleaseSIGIO();
input_unlock();
}
}
}
......@@ -487,7 +484,7 @@ xf86VTLeave(void)
for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next)
xf86DisableInputDeviceForVTSwitch(pInfo);
OsBlockSIGIO();
input_lock();
for (i = 0; i < xf86NumScreens; i++)
xf86Screens[i]->LeaveVT(xf86Screens[i]);
for (i = 0; i < xf86NumGPUScreens; i++)
......@@ -545,7 +542,7 @@ switch_failed:
else
xf86EnableGeneralHandler(ih);
}
OsReleaseSIGIO();
input_unlock();
}
void
......@@ -603,7 +600,7 @@ xf86VTEnter(void)
xf86UpdateHasVTProperty(TRUE);
OsReleaseSIGIO();
input_unlock();
}
/*
......
......@@ -1723,7 +1723,11 @@ xf86SetSilkenMouse(ScreenPtr pScreen)
* yet. Should handle this differently so that alternate async methods
* work correctly with this too.
*/
pScrn->silkenMouse = useSM && xf86Info.useSIGIO && xf86SIGIOSupported();
/* Disable this completely when removing SIGIO support. It
* will get re-enabled correctly when we add threaded input
* support
*/
pScrn->silkenMouse = useSM && FALSE;
if (serverGeneration == 1)
xf86DrvMsg(pScreen->myNum, from, "Silken mouse %s\n",
pScrn->silkenMouse ? "enabled" : "disabled");
......
......@@ -762,7 +762,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
#endif
xf86AccessEnter();
OsBlockSIGIO();
input_lock();
sigio_blocked = TRUE;
}
}
......@@ -864,7 +864,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
xf86VGAarbiterWrapFunctions();
if (sigio_blocked)
OsReleaseSIGIO();
input_unlock();
xf86InitOrigins();
......@@ -1010,7 +1010,7 @@ AbortDDX(enum ExitCode error)
{
int i;
OsBlockSIGIO();
input_lock();
/*
* try to restore the original video state
......
......@@ -107,7 +107,7 @@ suspend(pmEvent event, Bool undo)
DisableDevice(pInfo->dev, TRUE);
pInfo = pInfo->next;
}
OsBlockSIGIO();
input_lock();
for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->PMEvent)
xf86Screens[i]->PMEvent(xf86Screens[i], event, undo);
......@@ -135,7 +135,7 @@ resume(pmEvent event, Bool undo)
xf86Screens[i]->EnterVT(xf86Screens[i]);
}
}
OsReleaseSIGIO();
input_unlock();
for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->EnableDisableFBAccess)
(*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE);
......@@ -182,13 +182,13 @@ DoApmEvent(pmEvent event, Bool undo)
}
break;
default:
OsBlockSIGIO();
input_lock();
for (i = 0; i < xf86NumScreens; i++) {
if (xf86Screens[i]->PMEvent) {
xf86Screens[i]->PMEvent(xf86Screens[i], event, undo);
}
}
OsReleaseSIGIO();
input_unlock();
break;
}
}
......
......@@ -931,7 +931,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
/* Enable it if it's properly initialised and we're currently in the VT */
if (enable && dev->inited && dev->startup && xf86VTOwner()) {
OsBlockSignals();
input_lock();
EnableDevice(dev, TRUE);
if (!dev->enabled) {
OsReleaseSignals();
......@@ -942,7 +942,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
}
/* send enter/leave event, update sprite window */
CheckMotion(NULL, dev);
OsReleaseSignals();
input_unlock();
}
*pdev = dev;
......@@ -1075,7 +1075,7 @@ DeleteInputDeviceRequest(DeviceIntPtr pDev)
if (pInfo) /* need to get these before RemoveDevice */
drv = pInfo->drv;
OsBlockSignals();
input_lock();
RemoveDevice(pDev, TRUE);
if (!isMaster && pInfo != NULL) {
......@@ -1084,7 +1084,7 @@ DeleteInputDeviceRequest(DeviceIntPtr pDev)
else
xf86DeleteInput(pInfo, 0);
}
OsReleaseSignals();
input_unlock();
}
/*
......
......@@ -130,6 +130,26 @@ xf86IsPipe(int fd)
return S_ISFIFO(buf.st_mode);
}
static void
xf86BlockSIGIO(void)
{
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGIO);
sigprocmask(SIG_BLOCK, &set, NULL);
}
static void
xf86ReleaseSIGIO(void)
{
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGIO);
sigprocmask(SIG_UNBLOCK, &set, NULL);
}
int
xf86InstallSIGIOHandler(int fd, void (*f) (int, void *), void *closure)
{
......@@ -145,7 +165,7 @@ xf86InstallSIGIOHandler(int fd, void (*f) (int, void *), void *closure)
if (!xf86SigIOFuncs[i].f) {
if (xf86IsPipe(fd))
return 0;
OsBlockSIGIO();
xf86BlockSIGIO();
#ifdef O_ASYNC
if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_ASYNC) == -1) {
xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n",
......@@ -173,7 +193,7 @@ xf86InstallSIGIOHandler(int fd, void (*f) (int, void *), void *closure)
}
#endif
if (!installed) {
OsReleaseSIGIO();
xf86ReleaseSIGIO();
return 0;
}
sigemptyset(&sa.sa_mask);
......@@ -189,7 +209,7 @@ xf86InstallSIGIOHandler(int fd, void (*f) (int, void *), void *closure)
if (fd >= xf86SigIOMaxFd)
xf86SigIOMaxFd = fd + 1;
FD_SET(fd, &xf86SigIOMask);
OsReleaseSIGIO();
xf86ReleaseSIGIO();
return 1;
}
/* Allow overwriting of the closure and callback */
......@@ -258,34 +278,3 @@ xf86RemoveSIGIOHandler(int fd)
}
return ret;
}
int
xf86BlockSIGIO(void)
{
return OsBlockSIGIO();
}
void
xf86UnblockSIGIO(int wasset)
{
OsReleaseSIGIO();
}
void
xf86AssertBlockedSIGIO(char *where)
{
sigset_t set, old;
sigemptyset(&set);
sigprocmask(SIG_BLOCK, &set, &old);
if (!sigismember(&old, SIGIO))