--- ./nx-X11/programs/Xserver/hw/nxagent/X/NXglxext.c.X.original	2015-02-13 14:03:44.744441510 +0100
+++ ./nx-X11/programs/Xserver/hw/nxagent/X/NXglxext.c	2015-02-10 19:13:13.808685737 +0100
@@ -1,3 +1,20 @@
+/**************************************************************************/
+/*                                                                        */
+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/.         */
+/*                                                                        */
+/* NXAGENT, NX protocol compression and NX extensions to this software    */
+/* are copyright of NoMachine. Redistribution and use of the present      */
+/* software is allowed according to terms specified in the file LICENSE   */
+/* which comes in the source distribution.                                */
+/*                                                                        */
+/* Check http://www.nomachine.com/licensing.html for applicability.       */
+/*                                                                        */
+/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
+/*                                                                        */
+/* All rights reserved.                                                   */
+/*                                                                        */
+/**************************************************************************/
+
 /* $XFree86: xc/programs/Xserver/GL/glx/glxext.c,v 1.9 2003/09/28 20:15:43 alanh Exp $
 ** The contents of this file are subject to the GLX Public License Version 1.0
 ** (the "License"). You may not use this file except in compliance with the
@@ -33,6 +50,12 @@
 #include "glxext.h"
 #include "micmap.h"
 
+#include "Trap.h"
+
+#define PANIC
+#define WARNING
+#undef  TEST
+#undef  DEBUG
 
 void GlxWrapInitVisuals(miInitVisualsProcPtr *);
 void GlxSetVisualConfigs(int nconfigs, 
@@ -395,6 +418,8 @@
 */
 static int __glXDispatch(ClientPtr client)
 {
+    int result;
+
     REQUEST(xGLXSingleReq);
     CARD8 opcode;
     int (*proc)(__GLXclientState *cl, GLbyte *pc);
@@ -444,11 +469,35 @@
     ** Use the opcode to index into the procedure table.
     */
     proc = __glXSingleTable[opcode];
-    return (*proc)(cl, (GLbyte *) stuff);
+
+    /*
+     * Report upstream that we are
+     * dispatching a GLX operation.
+     */
+
+    nxagentGlxTrap = 1;
+
+    #ifdef TEST
+    fprintf(stderr, "__glXDispatch: Going to dispatch GLX operation [%d] for client [%d].\n", 
+                opcode, client -> index);
+    #endif
+    
+    result = (*proc)(cl, (GLbyte *) stuff);
+
+    nxagentGlxTrap = 0;
+
+    #ifdef TEST
+    fprintf(stderr, "__glXDispatch: Dispatched GLX operation [%d] for client [%d].\n", 
+                opcode, client -> index);
+    #endif
+
+    return result;
 }
 
 static int __glXSwapDispatch(ClientPtr client)
 {
+    int result;
+
     REQUEST(xGLXSingleReq);
     CARD8 opcode;
     int (*proc)(__GLXclientState *cl, GLbyte *pc);
@@ -490,7 +539,29 @@
     ** Use the opcode to index into the procedure table.
     */
     proc = __glXSwapSingleTable[opcode];
-    return (*proc)(cl, (GLbyte *) stuff);
+
+    /*
+     * Report upstream that we are
+     * dispatching a GLX operation.
+     */
+
+    nxagentGlxTrap = 1;
+
+    #ifdef TEST
+    fprintf(stderr, "__glXDispatch: Going to dispatch GLX operation [%d] for client [%d].\n", 
+                opcode, client -> index);
+    #endif
+    
+    result = (*proc)(cl, (GLbyte *) stuff);
+
+    nxagentGlxTrap = 0;
+
+    #ifdef TEST
+    fprintf(stderr, "__glXDispatch: Dispatched GLX operation [%d] for client [%d].\n", 
+                opcode, client -> index);
+    #endif
+
+    return result;
 }
 
 int __glXNoSuchSingleOpcode(__GLXclientState *cl, GLbyte *pc)
@@ -502,4 +573,3 @@
 {
     return;
 }
-
