[PATCH 2/6] Replace DDXBEFORERESET with a more general way of doing DDX-specific hooks
Jon TURNEY
jon.turney at dronecode.org.uk
Mon Jan 17 06:20:37 PST 2011
Replace DDXBEFORERESET, which was introduced for the sole benefit of XWin
in commit 048045a9, with a slightly more general way of doing DDX-specific
hooks, still for the sole benefit of XWin :-)
Use a structure of function pointers, which can be initialized as required
by the specific DDX during main(), before dix_main() is called.
Change main() in the XWin DDX to initializes the ddxBeforeReset hook.
Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
---
configure.ac | 1 -
dix/dispatch.c | 8 +++++---
dix/globals.c | 3 +++
hw/dmx/dmxinit.c | 6 ------
hw/vfb/InitOutput.c | 7 -------
hw/xnest/Init.c | 6 ------
hw/xwin/InitOutput.c | 7 ++++---
include/dix-config.h.in | 3 ---
include/dixmain.h | 9 +++++++++
include/os.h | 4 ----
10 files changed, 21 insertions(+), 33 deletions(-)
diff --git a/configure.ac b/configure.ac
index 1ceffe7..23d5217 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1896,7 +1896,6 @@ if test "x$XWIN" = xyes; then
fi
AC_DEFINE(DDXOSVERRORF, 1, [Use OsVendorVErrorF])
- AC_DEFINE(DDXBEFORERESET, 1, [Use ddxBeforeReset ])
fi
AM_CONDITIONAL(XWIN, [test "x$XWIN" = xyes])
AM_CONDITIONAL(XWIN_MULTIWINDOW, [test "x$XWIN" = xyes])
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 7b2132d..562ea44 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 "dixmain.h"
#ifdef XSERVER_DTRACE
#include "registry.h"
@@ -456,9 +457,10 @@ Dispatch(void)
}
dispatchException &= ~DE_PRIORITYCHANGE;
}
-#if defined(DDXBEFORERESET)
- ddxBeforeReset ();
-#endif
+
+ if (ddxHooks.ddxBeforeReset)
+ ddxHooks.ddxBeforeReset();
+
KillAllClients();
free(clientReady);
dispatchException &= ~DE_RESET;
diff --git a/dix/globals.c b/dix/globals.c
index 0a6b170..70b4b89 100644
--- a/dix/globals.c
+++ b/dix/globals.c
@@ -60,6 +60,7 @@ SOFTWARE.
#include "site.h"
#include "dixstruct.h"
#include "os.h"
+#include "dixmain.h"
ScreenInfo screenInfo;
KeybdCtrl defaultKeyboardControl = {
@@ -129,3 +130,5 @@ char *display;
char *ConnectionInfo;
CARD32 TimeOutValue = DEFAULT_TIMEOUT * MILLI_PER_SECOND;
+
+DdxHooks ddxHooks;
diff --git a/hw/dmx/dmxinit.c b/hw/dmx/dmxinit.c
index 9012382..3115a97 100644
--- a/hw/dmx/dmxinit.c
+++ b/hw/dmx/dmxinit.c
@@ -839,12 +839,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 14d0c03..2ca1e15 100644
--- a/hw/vfb/InitOutput.c
+++ b/hw/vfb/InitOutput.c
@@ -229,13 +229,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 f6b4a20..7205cd3 100644
--- a/hw/xnest/Init.c
+++ b/hw/xnest/Init.c
@@ -152,9 +152,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 4e55a89..7c8a9e6 100644
--- a/hw/xwin/InitOutput.c
+++ b/hw/xwin/InitOutput.c
@@ -172,13 +172,12 @@ ddxPushProviders(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");
@@ -187,10 +186,12 @@ ddxBeforeReset (void)
winClipboardShutdown ();
#endif
}
-#endif
int main(int argc, char *argv[], char *envp[])
{
+ /* Initialize DDX-specific hooks */
+ ddxHooks.ddxBeforeReset = ddxBeforeReset;
+
return dix_main(argc, argv, envp);
}
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 5622766..58bc9c6 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/dixmain.h b/include/dixmain.h
index 992823b..ab03756 100644
--- a/include/dixmain.h
+++ b/include/dixmain.h
@@ -26,4 +26,13 @@
int dix_main(int argc, char *argv[], char *envp[]);
+struct _DdxHooks
+{
+ void (*ddxBeforeReset)(void);
+};
+
+typedef struct _DdxHooks DdxHooks;
+
+extern DdxHooks ddxHooks;
+
#endif /* DIXMAIN_H */
diff --git a/include/os.h b/include/os.h
index d747040..30913d5 100644
--- a/include/os.h
+++ b/include/os.h
@@ -84,10 +84,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.3.3
More information about the xorg-devel
mailing list