[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