[PATCH 1/5] Replace DDXBEFORERESET with a more general way of doing DDX-specific hooks
Jamey Sharp
jamey at minilop.net
Wed Apr 7 10:32:02 PDT 2010
I'm confused about whether multiple declarations of the same global
are allowed. In this case, ddxHooks is declared in both
xwin/InitOutput.c and dispatch.c. But as far as I can tell, this can't
hurt any DDX except Xwin, and I assume you've tested that it works
there, so I'd guess it's fine. :-)
Reviewed-by: Jamey Sharp <jamey at minilop.net>
On Wed, Apr 7, 2010 at 9:18 AM, Jon TURNEY <jon.turney at dronecode.org.uk> wrote:
> If we use DDXBEFORERESET to control if the DIX calls ddxBeforeReset(),
> all DDX built at the same time must provide that function, whether they
> need it or not.
>
> Instead use (a structure of) function pointers, which can be initialized
> as required by the specific DDX
>
> Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
> ---
> configure.ac | 1 -
> dix/dispatch.c | 7 ++++---
> hw/dmx/dmxinit.c | 6 ------
> hw/vfb/InitOutput.c | 7 -------
> hw/xnest/Init.c | 6 ------
> hw/xwin/InitOutput.c | 9 ++++++---
> include/ddxhooks.h | 37 +++++++++++++++++++++++++++++++++++++
> include/dix-config.h.in | 3 ---
> include/os.h | 4 ----
> 9 files changed, 47 insertions(+), 33 deletions(-)
> create mode 100644 include/ddxhooks.h
>
> diff --git a/configure.ac b/configure.ac
> index 591d2b4..73e582b 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1873,7 +1873,6 @@ if test "x$XWIN" = xyes; then
> fi
>
> AC_DEFINE(DDXOSVERRORF, 1, [Use OsVendorVErrorF])
> - AC_DEFINE(DDXBEFORERESET, 1, [Use ddxBeforeReset ])
> if test "x$XF86VIDMODE" = xyes; then
> AC_MSG_NOTICE([Disabling XF86VidMode extension])
> XF86VIDMODE=no
> diff --git a/dix/dispatch.c b/dix/dispatch.c
> index 982c808..dd16c2f 100644
> --- a/dix/dispatch.c
> +++ b/dix/dispatch.c
> @@ -130,6 +130,7 @@ int ProcInitialConnection();
> #include "inputstr.h"
> #include "xkbsrv.h"
> #include "site.h"
> +#include "ddxhooks.h"
>
> #ifdef XSERVER_DTRACE
> #include "registry.h"
> @@ -462,9 +463,9 @@ Dispatch(void)
> }
> dispatchException &= ~DE_PRIORITYCHANGE;
> }
> -#if defined(DDXBEFORERESET)
> - ddxBeforeReset ();
> -#endif
> +
> + if (ddxHooks.ddxBeforeReset) ddxHooks.ddxBeforeReset();
> +
> KillAllClients();
> xfree(clientReady);
> dispatchException &= ~DE_RESET;
> diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
> index f481cf5..e5598e3 100644
> --- a/hw/dmx/dmxinit.c
> +++ b/hw/dmx/dmxinit.c
> @@ -846,12 +846,6 @@ void AbortDDX(void)
> }
> }
>
> -#ifdef DDXBEFORERESET
> -void ddxBeforeReset(void)
> -{
> -}
> -#endif
> -
> /** This function is called in Xserver/dix/main.c from \a main() when
> * dispatchException & DE_TERMINATE (which is the only way to exit the
> * main loop without an interruption. */
> diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
> index e7dd1d9..a847122 100644
> --- a/hw/vfb/InitOutput.c
> +++ b/hw/vfb/InitOutput.c
> @@ -236,13 +236,6 @@ OsVendorFatalError(void)
> {
> }
>
> -#if defined(DDXBEFORERESET)
> -void ddxBeforeReset(void)
> -{
> - return;
> -}
> -#endif
> -
> void
> ddxUseMsg(void)
> {
> diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c
> index 8a90cc6..73b9fa2 100644
> --- a/hw/xnest/Init.c
> +++ b/hw/xnest/Init.c
> @@ -146,9 +146,3 @@ void OsVendorFatalError(void)
> return;
> }
>
> -#if defined(DDXBEFORERESET)
> -void ddxBeforeReset(void)
> -{
> - return;
> -}
> -#endif
> diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
> index 175cd9d..2ecca37 100644
> --- a/hw/xwin/InitOutput.c
> +++ b/hw/xwin/InitOutput.c
> @@ -57,6 +57,7 @@ typedef HRESULT (*SHGETFOLDERPATHPROC)(
> LPTSTR pszPath
> );
> #endif
> +#include "ddxhooks.h"
>
>
> /*
> @@ -190,13 +191,12 @@ winClipboardShutdown (void)
> #endif
>
>
> -#if defined(DDXBEFORERESET)
> /*
> * Called right before KillAllClients when the server is going to reset,
> * allows us to shutdown our seperate threads cleanly.
> */
>
> -void
> +static void
> ddxBeforeReset (void)
> {
> winDebug ("ddxBeforeReset - Hello\n");
> @@ -205,8 +205,11 @@ ddxBeforeReset (void)
> winClipboardShutdown ();
> #endif
> }
> -#endif
>
> +DdxHooks ddxHooks =
> + {
> + .ddxBeforeReset = ddxBeforeReset
> + };
>
> /* See Porting Layer Definition - p. 57 */
> void
> diff --git a/include/ddxhooks.h b/include/ddxhooks.h
> new file mode 100644
> index 0000000..4d69508
> --- /dev/null
> +++ b/include/ddxhooks.h
> @@ -0,0 +1,37 @@
> +/*
> + Copyright © 2009 Jon TURNEY
> +
> + Permission is hereby granted, free of charge, to any person obtaining a
> + copy of this software and associated documentation files (the "Software"),
> + to deal in the Software without restriction, including without limitation
> + the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + and/or sell copies of the Software, and to permit persons to whom the
> + Software is furnished to do so, subject to the following conditions:
> +
> + The above copyright notice and this permission notice (including the next
> + paragraph) shall be included in all copies or substantial portions of the
> + Software.
> +
> + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> + DEALINGS IN THE SOFTWARE.
> +*/
> +
> +#ifndef DDXHOOKS_H
> +#define DDXHOOKS_H
> +
> +struct _DdxHooks
> +{
> + void (*ddxBeforeReset)(void);
> +};
> +
> +typedef struct _DdxHooks DdxHooks;
> +
> +/* zero-initialized tentative definition of ddxHooks, which may be overriden by DDX */
> +DdxHooks ddxHooks;
> +
> +#endif /* DDXHOOKS_H */
> diff --git a/include/dix-config.h.in b/include/dix-config.h.in
> index 058c8fd..07e9593 100644
> --- a/include/dix-config.h.in
> +++ b/include/dix-config.h.in
> @@ -36,9 +36,6 @@
> /* Use OsVendorVErrorF */
> #undef DDXOSVERRORF
>
> -/* Use ddxBeforeReset */
> -#undef DDXBEFORERESET
> -
> /* Build DPMS extension */
> #undef DPMSExtension
>
> diff --git a/include/os.h b/include/os.h
> index 453ab82..9f0a284 100644
> --- a/include/os.h
> +++ b/include/os.h
> @@ -83,10 +83,6 @@ typedef struct _NewClientRec *NewClientPtr;
> #include <stdio.h>
> #include <stdarg.h>
>
> -#ifdef DDXBEFORERESET
> -extern void ddxBeforeReset (void);
> -#endif
> -
> #ifdef DDXOSVERRORF
> extern _X_EXPORT void (*OsVendorVErrorFProc)(const char *, va_list args);
> #endif
> --
> 1.7.0.4
More information about the xorg-devel
mailing list