[PATCH libXxf86misc] Add missing UnlockDisplay() and SyncHandle() to some error paths.

Matt Turner mattst88 at gmail.com
Wed Sep 7 11:50:35 PDT 2011


On Wed, Sep 7, 2011 at 10:46 AM, Egbert Eich <eich at freedesktop.org> wrote:
> Without unlocking the display the application will hang if the
> code goes into one of the error paths.
> Signed-off-by: Egbert Eich <eich at freedesktop.org>
> ---
>  src/XF86Misc.c |   10 ++++++++++
>  1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/src/XF86Misc.c b/src/XF86Misc.c
> index 193224f..2985525 100644
> --- a/src/XF86Misc.c
> +++ b/src/XF86Misc.c
> @@ -147,6 +147,8 @@ Bool XF86MiscGetMouseSettings(Display* dpy, XF86MiscMouseSettings *mouseinfo)
>         if (!(mouseinfo->device = Xcalloc(rep.devnamelen + 1, 1))) {
>             _XEatData(dpy, (rep.devnamelen+3) & ~3);
>             Xfree(mouseinfo->device);
> +           UnlockDisplay(dpy);
> +           SyncHandle();
>             return False;
>         }
>         _XReadPad(dpy, mouseinfo->device, rep.devnamelen);
> @@ -291,6 +293,8 @@ Bool XF86MiscGetFilePaths(Display* dpy, XF86MiscFilePaths *filpaths)
>         if (!(filpaths->configfile = Xcalloc(rep.configlen + 1, 1))) {
>             _XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
>                            + ((rep.loglen+3) & ~3));
> +           UnlockDisplay(dpy);
> +           SyncHandle();
>             return False;
>         }
>     }
> @@ -301,6 +305,8 @@ Bool XF86MiscGetFilePaths(Display* dpy, XF86MiscFilePaths *filpaths)
>                            + ((rep.loglen+3) & ~3));
>             if (filpaths->configfile)
>                    Xfree(filpaths->configfile);
> +           UnlockDisplay(dpy);
> +           SyncHandle();
>             return False;
>         }
>     }
> @@ -313,6 +319,8 @@ Bool XF86MiscGetFilePaths(Display* dpy, XF86MiscFilePaths *filpaths)
>                    Xfree(filpaths->configfile);
>             if (filpaths->modulepath)
>                    Xfree(filpaths->modulepath);
> +           UnlockDisplay(dpy);
> +           SyncHandle();
>             return False;
>         }
>     }
> @@ -374,6 +382,8 @@ Status XF86MiscPassMessage(Display* dpy, int screen,
>     if (rep.mesglen) {
>         if (!(*retmsg = Xcalloc(rep.mesglen + 1, 1))) {
>             _XEatData(dpy, ((rep.mesglen+3) & ~3));
> +           UnlockDisplay(dpy);
> +           SyncHandle();
>             return BadAlloc;
>         }
>         _XReadPad(dpy, *retmsg, rep.mesglen);
> --
> 1.7.3.4

It's odd how in an if() block immediately some of these hunks, we
already had UnlockDisplay/SyncHandle, but it was missing from others.

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the xorg-devel mailing list