[PATCH 04/12] xf86Events: refactor xf86VTLeave error handling

Peter Hutterer peter.hutterer at who-t.net
Mon Jan 27 22:33:28 PST 2014


On Wed, Jan 15, 2014 at 03:32:18PM +0100, Hans de Goede wrote:
> Use kernel goto style error handling for xf86VTSwitchAway() failure. This
> makes it much easier to read the straight path.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
   Peter

> ---
>  hw/xfree86/common/xf86Events.c | 94 +++++++++++++++++++++---------------------
>  1 file changed, 46 insertions(+), 48 deletions(-)
> 
> diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
> index e4ec177..e0ec768 100644
> --- a/hw/xfree86/common/xf86Events.c
> +++ b/hw/xfree86/common/xf86Events.c
> @@ -454,62 +454,60 @@ xf86VTLeave(void)
>  
>      xf86AccessLeave();      /* We need this here, otherwise */
>  
> -    if (!xf86VTSwitchAway()) {
> +    if (!xf86VTSwitchAway())
> +        goto switch_failed;
> +
> +#ifdef XF86PM
> +    if (xf86OSPMClose)
> +        xf86OSPMClose();
> +    xf86OSPMClose = NULL;
> +#endif
> +
> +    for (i = 0; i < xf86NumScreens; i++) {
>          /*
> -         * switch failed
> +         * zero all access functions to
> +         * trap calls when switched away.
>           */
> +        xf86Screens[i]->vtSema = FALSE;
> +    }
> +    if (xorgHWAccess)
> +        xf86DisableIO();
>  
> -        DebugF("xf86VTSwitch: Leave failed\n");
> -        xf86AccessEnter();
> -        for (i = 0; i < xf86NumScreens; i++) {
> -            if (!xf86Screens[i]->EnterVT(xf86Screens[i]))
> -                FatalError("EnterVT failed for screen %d\n", i);
> -        }
> -        for (i = 0; i < xf86NumGPUScreens; i++) {
> -            if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i]))
> -                FatalError("EnterVT failed for gpu screen %d\n", i);
> -        }
> -        if (!(dispatchException & DE_TERMINATE)) {
> -            for (i = 0; i < xf86NumScreens; i++) {
> -                if (xf86Screens[i]->EnableDisableFBAccess)
> -                    (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE);
> -            }
> -        }
> -        dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset);
> -
> -        pInfo = xf86InputDevs;
> -        while (pInfo) {
> -            if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0)
> -                EnableDevice(pInfo->dev, TRUE);
> -            pInfo->flags &= ~XI86_DEVICE_DISABLED;
> -            pInfo = pInfo->next;
> -        }
> -        for (ih = InputHandlers; ih; ih = ih->next) {
> -            if (ih->is_input)
> -                xf86EnableInputHandler(ih);
> -            else
> -                xf86EnableGeneralHandler(ih);
> -        }
> -        OsReleaseSIGIO();
> +    return;
>  
> +switch_failed:
> +    DebugF("xf86VTSwitch: Leave failed\n");
> +    xf86AccessEnter();
> +    for (i = 0; i < xf86NumScreens; i++) {
> +        if (!xf86Screens[i]->EnterVT(xf86Screens[i]))
> +            FatalError("EnterVT failed for screen %d\n", i);
>      }
> -    else {
> -#ifdef XF86PM
> -        if (xf86OSPMClose)
> -            xf86OSPMClose();
> -        xf86OSPMClose = NULL;
> -#endif
> -
> +    for (i = 0; i < xf86NumGPUScreens; i++) {
> +        if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i]))
> +            FatalError("EnterVT failed for gpu screen %d\n", i);
> +    }
> +    if (!(dispatchException & DE_TERMINATE)) {
>          for (i = 0; i < xf86NumScreens; i++) {
> -            /*
> -             * zero all access functions to
> -             * trap calls when switched away.
> -             */
> -            xf86Screens[i]->vtSema = FALSE;
> +            if (xf86Screens[i]->EnableDisableFBAccess)
> +                (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE);
>          }
> -        if (xorgHWAccess)
> -            xf86DisableIO();
>      }
> +    dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset);
> +
> +    pInfo = xf86InputDevs;
> +    while (pInfo) {
> +        if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0)
> +            EnableDevice(pInfo->dev, TRUE);
> +        pInfo->flags &= ~XI86_DEVICE_DISABLED;
> +        pInfo = pInfo->next;
> +    }
> +    for (ih = InputHandlers; ih; ih = ih->next) {
> +        if (ih->is_input)
> +            xf86EnableInputHandler(ih);
> +        else
> +            xf86EnableGeneralHandler(ih);
> +    }
> +    OsReleaseSIGIO();
>  }
>  
>  void
> -- 
> 1.8.4.2
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list