[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