[PATCH 10/14] dix: Add PostDispatchCallback

Adam Jackson ajax at redhat.com
Thu Nov 21 14:43:23 PST 2013


This is required to Xineramify the Damage extension, since we need to
collect regions across screens.  You can't quite use FlushCallback for
this since WriteEventsToClient can itself trigger FlushCallback and you
recurse.

There are probably other cases where this would be useful though, for
example some of our abuse of BlockHandler may want to move to this
callback.

Signed-off-by: Adam Jackson <ajax at redhat.com>
---
 dix/dispatch.c      | 5 ++++-
 include/dixstruct.h | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/dix/dispatch.c b/dix/dispatch.c
index 8dcd9cb..a2bd85a 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -167,6 +167,7 @@ static int nextFreeClientID;    /* always MIN free client ID */
 static int nClients;            /* number of authorized clients */
 
 CallbackListPtr ClientStateCallback;
+CallbackListPtr PostDispatchCallback;
 
 /* dispatchException & isItTimeToYield must be declared volatile since they
  * are modified by signal handlers - otherwise optimizer may assume it doesn't
@@ -429,9 +430,11 @@ Dispatch(void)
                     result = BadLength;
                 else {
                     result = XaceHookDispatch(client, client->majorOp);
-                    if (result == Success)
+                    if (result == Success) {
                         result =
                             (*client->requestVector[client->majorOp]) (client);
+                        CallCallbacks(&PostDispatchCallback, &result);
+                    }
                     XaceHookAuditEnd(client, result);
                 }
 #ifdef XSERVER_DTRACE
diff --git a/include/dixstruct.h b/include/dixstruct.h
index 6f5667f..63f6027 100644
--- a/include/dixstruct.h
+++ b/include/dixstruct.h
@@ -39,6 +39,7 @@ SOFTWARE.
  */
 
 extern _X_EXPORT CallbackListPtr ClientStateCallback;
+extern _X_EXPORT CallbackListPtr PostDispatchCallback;
 
 typedef struct {
     ClientPtr client;
-- 
1.8.4.2



More information about the xorg-devel mailing list