[PATCH] Fix locking bugs with XIAllowTouchEvents() and XIUngrabTouchBegin()

Peter Hutterer peter.hutterer at who-t.net
Sun Jul 13 15:47:28 PDT 2014


On Fri, Jul 11, 2014 at 03:13:54PM -0400, otaylor at redhat.com wrote:
> From: "Owen W. Taylor" <otaylor at fishsoup.net>
> 
> Fix two places where the display was double locked when an API
> function chained to an implementation that also locks the display.
> ---
>  src/XIAllowEvents.c | 7 +------
>  src/XIPassiveGrab.c | 1 +
>  2 files changed, 2 insertions(+), 6 deletions(-)
> 
> diff --git a/src/XIAllowEvents.c b/src/XIAllowEvents.c
> index c8d997a..2468fce 100644
> --- a/src/XIAllowEvents.c
> +++ b/src/XIAllowEvents.c
> @@ -86,17 +86,12 @@ Status
>  XIAllowTouchEvents(Display *dpy, int deviceid, unsigned int touchid,
>                     Window grab_window, int event_mode)
>  {
> -    int status;
>      XExtDisplayInfo *extinfo = XInput_find_display(dpy);
>  
>      LockDisplay(dpy);
>      if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == -1)
>  	return (NoSuchExtension);
> -
> -    status = _XIAllowEvents(dpy, deviceid, event_mode, CurrentTime, touchid, grab_window);
> -
>      UnlockDisplay(dpy);
> -    SyncHandle();
>  
> -    return status;
> +    return _XIAllowEvents(dpy, deviceid, event_mode, CurrentTime, touchid, grab_window);
>  }
> diff --git a/src/XIPassiveGrab.c b/src/XIPassiveGrab.c
> index 88f1aff..c743516 100644
> --- a/src/XIPassiveGrab.c
> +++ b/src/XIPassiveGrab.c
> @@ -249,6 +249,7 @@ XIUngrabTouchBegin(Display* display, int deviceid, Window grab_window,
>      LockDisplay(display);
>      if (_XiCheckExtInit(display, XInput_2_2, extinfo) == -1)
>  	return -1;
> +    UnlockDisplay(display);
>  
>      return _XIPassiveUngrabDevice(display, deviceid, XIGrabtypeTouchBegin, 0,
>                                    grab_window, num_modifiers, modifiers);
> -- 
> 1.9.3

pushed, thanks!
   0250f40..b731d13  master -> master

I'll give it a few days to see if you find another one like this and then
push out the 1.7.4 update.

Cheers,
   Peter


More information about the xorg-devel mailing list