[PATCH xserver 2/6] Remove SIGIO support.
Peter Hutterer
peter.hutterer at who-t.net
Tue Dec 8 21:11:03 PST 2015
On Tue, Dec 08, 2015 at 03:44:50PM -0800, Keith Packard wrote:
> This removes all of the SIGIO handling support 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.
>
> Signed-off-by: Keith Packard <keithp at keithp.com>
[...]
> /**
> diff --git a/config/config.c b/config/config.c
> index de45cc3..263982e 100644
> --- a/config/config.c
> +++ b/config/config.c
> @@ -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();
> ProcessInputEvents();
> + input_lock();
this is a behaviour change, was this intended? I'd rather not have this
hidden in a giant patch that is otherwise mostly search and replace.
> DeleteInputDeviceRequest(dev);
> - OsReleaseSignals();
> + input_unlock();
> }
>
> void
> diff --git a/dix/devices.c b/dix/devices.c
> index 9b0c7d2..7ba6b94 100644
> --- a/dix/devices.c
> +++ b/dix/devices.c
[...]
> @@ -1077,8 +1077,8 @@ TouchEndPhysicallyActiveTouches(DeviceIntPtr dev)
> InternalEvent *eventlist = InitEventList(GetMaximumEventsNum());
> int i;
>
> - OsBlockSignals();
> mieqProcessInputEvents();
> + input_lock();
same here. How about making the first patch all the search/replace cases and
let input_lock/unlock call OsBlockSignals/OsReleaseSignals. Then in the
second patch you can change the places where it needs to be moved around,
then in a third patch actually drop the signal handling.
> 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());
> }
> diff --git a/hw/dmx/input/dmxevents.c b/hw/dmx/input/dmxevents.c
> index 2b579ee..3789602 100644
> --- a/hw/dmx/input/dmxevents.c
> +++ b/hw/dmx/input/dmxevents.c
> @@ -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;
> diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c
> index 896bac5..e98cd12 100644
> --- a/hw/kdrive/ephyr/ephyr.c
> +++ b/hw/kdrive/ephyr/ephyr.c
> @@ -836,11 +836,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 = {
> diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c
> index 1fdaa52..a3e352c 100644
> --- a/hw/kdrive/src/kinput.c
> +++ b/hw/kdrive/src/kinput.c
> @@ -93,38 +93,6 @@ static int kdNumInputFds;
>
> extern Bool kdRawPointerCoordinates;
>
> -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
> @@ -156,51 +124,25 @@ static void
> KdNotifyFd(int fd, int ready, void *data)
> {
> int i = (int) (intptr_t) data;
> - OsBlockSIGIO();
> (*kdInputFds[i].read)(fd, kdInputFds[i].closure);
> - OsReleaseSIGIO();
> }
>
> static void
> KdAddFd(int fd, int i)
> {
> - struct sigaction act;
> - sigset_t set;
> -
> - kdnFds++;
> - fcntl(fd, F_SETOWN, getpid());
> KdNonBlockFd(fd);
> - AddEnabledDevice(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--;
> - RemoveEnabledDevice(fd);
> 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
> @@ -252,7 +194,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)
> @@ -334,8 +276,6 @@ KdEnableInput(void)
> /* reset screen saver */
> NoticeEventTime (&ev, pi->dixdev);
> }
> -
> - OsReleaseSIGIO();
this looks like it's missing an input_unlock()
> }
>
> static KdKeyboardDriver *
> @@ -1751,7 +1691,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++) {
> @@ -1762,7 +1702,7 @@ KdReleaseAllKeys(void)
> }
> }
>
> - OsReleaseSIGIO();
> + input_unlock();
> #endif
> }
>
> @@ -1950,9 +1890,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();
> }
> }
> }
> @@ -2049,10 +1989,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 = {
> diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
> index d2c3225..07afd42 100644
> --- a/hw/xfree86/common/xf86Config.c
> +++ b/hw/xfree86/common/xf86Config.c
> @@ -701,7 +701,6 @@ typedef enum {
> FLAG_AUTO_ENABLE_DEVICES,
> FLAG_GLX_VISUALS,
> FLAG_DRI2,
> - FLAG_USE_SIGIO,
> FLAG_AUTO_ADD_GPU,
> FLAG_MAX_CLIENTS,
> } FlagValues;
> @@ -759,8 +758,6 @@ static OptionInfoRec FlagOptions[] = {
> {0}, FALSE},
> {FLAG_DRI2, "DRI2", OPTV_BOOLEAN,
> {0}, FALSE},
> - {FLAG_USE_SIGIO, "UseSIGIO", OPTV_BOOLEAN,
> - {0}, FALSE},
> {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN,
> {0}, FALSE},
> {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER,
> @@ -808,27 +805,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);
> diff --git a/hw/xfree86/common/xf86Cursor.c b/hw/xfree86/common/xf86Cursor.c
> index 92c08af..de054fb 100644
> --- a/hw/xfree86/common/xf86Cursor.c
> +++ b/hw/xfree86/common/xf86Cursor.c
> @@ -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 *
> diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
> index 709afd6..3d16f24 100644
> --- a/hw/xfree86/common/xf86Events.c
> +++ b/hw/xfree86/common/xf86Events.c
> @@ -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,18 +291,15 @@ 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)
> -{
> - int errno_save = errno;
> +xf86ReadInput(int fd, int ready, void *closure) {
new line for {, no empty line before static void
> InputInfoPtr pInfo = closure;
>
> pInfo->read_input(pInfo);
> -
> - errno = errno_save;
> }
>
> /*
> @@ -312,9 +309,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 +319,7 @@ xf86AddEnabledDevice(InputInfoPtr pInfo)
> void
> xf86RemoveEnabledDevice(InputInfoPtr pInfo)
> {
> - if (!xf86RemoveSIGIOHandler(pInfo->fd)) {
> - RemoveEnabledDevice(pInfo->fd);
> - }
> + RemoveNotifyFd(pInfo->fd);
> }
>
> static int *xf86SignalIntercept = NULL;
> @@ -402,9 +395,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 +480,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 +538,7 @@ switch_failed:
> else
> xf86EnableGeneralHandler(ih);
> }
> - OsReleaseSIGIO();
> + input_unlock();
> }
>
> void
> @@ -603,7 +596,7 @@ xf86VTEnter(void)
>
> xf86UpdateHasVTProperty(TRUE);
>
> - OsReleaseSIGIO();
> + input_unlock();
> }
>
> /*
> diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c
> index c42e93e..b506338 100644
> --- a/hw/xfree86/common/xf86Helper.c
> +++ b/hw/xfree86/common/xf86Helper.c
> @@ -1729,7 +1729,7 @@ xf86SetSilkenMouse(ScreenPtr pScreen)
> * yet. Should handle this differently so that alternate async methods
> * work correctly with this too.
> */
> - pScrn->silkenMouse = useSM && xf86Info.useSIGIO && xf86SIGIOSupported();
> + pScrn->silkenMouse = useSM && FALSE;
wait, what?
> if (serverGeneration == 1)
> xf86DrvMsg(pScreen->myNum, from, "Silken mouse %s\n",
> pScrn->silkenMouse ? "enabled" : "disabled");
> diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
> index 017dcb6..5281e3e 100644
> --- a/hw/xfree86/common/xf86Init.c
> +++ b/hw/xfree86/common/xf86Init.c
> @@ -823,7 +823,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
> ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
> #endif
> xf86AccessEnter();
> - OsBlockSIGIO();
> + input_lock();
> sigio_blocked = TRUE;
> }
> }
> @@ -931,7 +931,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
>
> xf86VGAarbiterWrapFunctions();
> if (sigio_blocked)
> - OsReleaseSIGIO();
> + input_unlock();
>
> xf86InitOrigins();
>
> @@ -1077,7 +1077,7 @@ AbortDDX(enum ExitCode error)
> {
> int i;
>
> - OsBlockSIGIO();
> + input_lock();
>
> /*
> * try to restore the original video state
> diff --git a/hw/xfree86/common/xf86PM.c b/hw/xfree86/common/xf86PM.c
> index 9e49e8e..3f08c81 100644
> --- a/hw/xfree86/common/xf86PM.c
> +++ b/hw/xfree86/common/xf86PM.c
> @@ -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;
> }
> }
> diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
> index c56a2b9..481a760 100644
> --- a/hw/xfree86/common/xf86Xinput.c
> +++ b/hw/xfree86/common/xf86Xinput.c
> @@ -925,7 +925,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();
> @@ -936,7 +936,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
> }
> /* send enter/leave event, update sprite window */
> CheckMotion(NULL, dev);
> - OsReleaseSignals();
> + input_unlock();
> }
>
> *pdev = dev;
> @@ -1069,7 +1069,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) {
> @@ -1078,7 +1078,7 @@ DeleteInputDeviceRequest(DeviceIntPtr pDev)
> else
> xf86DeleteInput(pInfo, 0);
> }
> - OsReleaseSignals();
> + input_unlock();
> }
>
> /*
> diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
> index 875c9cc..49ecaca 100644
> --- a/hw/xfree86/dri/dri.c
> +++ b/hw/xfree86/dri/dri.c
> @@ -2377,56 +2377,6 @@ DRICreatePCIBusID(const struct pci_device *dev)
> return busID;
> }
>
> -static void
> -drmSIGIOHandler(int interrupt, void *closure)
> -{
> - unsigned long key;
> - void *value;
> - ssize_t count;
> - drm_ctx_t ctx;
> - typedef void (*_drmCallback) (int, void *, void *);
> - char buf[256];
> - drm_context_t old;
> - drm_context_t new;
> - void *oldctx;
> - void *newctx;
> - char *pt;
> - drmHashEntry *entry;
> - void *hash_table;
> -
> - hash_table = drmGetHashTable();
> -
> - if (!hash_table)
> - return;
> - if (drmHashFirst(hash_table, &key, &value)) {
> - entry = value;
> - do {
> -#if 0
> - fprintf(stderr, "Trying %d\n", entry->fd);
> -#endif
> - if ((count = read(entry->fd, buf, sizeof(buf) - 1)) > 0) {
> - buf[count] = '\0';
> -#if 0
> - fprintf(stderr, "Got %s\n", buf);
> -#endif
> -
> - for (pt = buf; *pt != ' '; ++pt); /* Find first space */
> - ++pt;
> - old = strtol(pt, &pt, 0);
> - new = strtol(pt, NULL, 0);
> - oldctx = drmGetContextTag(entry->fd, old);
> - newctx = drmGetContextTag(entry->fd, new);
> -#if 0
> - fprintf(stderr, "%d %d %p %p\n", old, new, oldctx, newctx);
> -#endif
> - ((_drmCallback) entry->f) (entry->fd, oldctx, newctx);
> - ctx.handle = new;
> - ioctl(entry->fd, DRM_IOCTL_NEW_CTX, &ctx);
> - }
> - } while (drmHashNext(hash_table, &key, &value));
> - }
> -}
> -
> int
> drmInstallSIGIOHandler(int fd, void (*f) (int, void *, void *))
is this an exported API or can we drop this?
> {
> @@ -2435,7 +2385,7 @@ drmInstallSIGIOHandler(int fd, void (*f) (int, void *, void *))
> entry = drmGetEntry(fd);
> entry->f = f;
>
> - return xf86InstallSIGIOHandler(fd, drmSIGIOHandler, 0);
> + return 0;
> }
>
> int
> @@ -2445,5 +2395,5 @@ drmRemoveSIGIOHandler(int fd)
>
> entry->f = NULL;
>
> - return xf86RemoveSIGIOHandler(fd);
> + return 0;
> }
> diff --git a/hw/xfree86/os-support/bsd/Makefile.am b/hw/xfree86/os-support/bsd/Makefile.am
> index b01ea5b..b2de637 100644
> --- a/hw/xfree86/os-support/bsd/Makefile.am
> +++ b/hw/xfree86/os-support/bsd/Makefile.am
> @@ -56,7 +56,6 @@ AM_CPPFLAGS = $(XORG_INCS)
>
> libbsd_la_SOURCES = \
> $(srcdir)/../shared/posix_tty.c \
> - $(srcdir)/../shared/sigio.c \
> $(srcdir)/../shared/vidmem.c \
> bsd_VTsw.c \
> bsd_init.c \
[...]
> diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
> index aeb702c..effda7c 100644
> --- a/xkb/xkbActions.c
> +++ b/xkb/xkbActions.c
> @@ -1526,7 +1526,7 @@ InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags,
> return;
>
> events = InitEventList(GetMaximumEventsNum() + 1);
> - OsBlockSignals();
> + input_lock();
> pScreen = miPointerGetScreen(ptr);
> saveWait = miPointerSetWaitForUpdate(pScreen, FALSE);
> nevents = GetPointerEvents(events, ptr, type, button, flags, mask);
> @@ -1534,10 +1534,10 @@ InjectPointerKeyEvents(DeviceIntPtr dev, int type, int button, int flags,
> UpdateFromMaster(&events[nevents], lastSlave, DEVCHANGE_POINTER_EVENT,
> &nevents);
> miPointerSetWaitForUpdate(pScreen, saveWait);
> - OsReleaseSignals();
>
> for (i = 0; i < nevents; i++)
> mieqProcessDeviceEvent(ptr, &events[i], NULL);
> + input_unlock();
again, a change in behaviour here
Cheers,
Peter
>
> FreeEventList(events, GetMaximumEventsNum());
>
> --
> 2.6.2
More information about the xorg-devel
mailing list