--- ./nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c.X.original	2015-02-13 14:03:44.748441432 +0100
+++ ./nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c	2015-02-13 14:03:44.748441432 +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.                                                   */
+/*                                                                        */
+/**************************************************************************/
+
 /* $XdotOrg: xc/programs/Xserver/Xext/xvdisp.c,v 1.6 2005/07/03 08:53:36 daniels Exp $ */
 /***********************************************************
 Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts,
@@ -71,6 +88,11 @@
 #include <X11/extensions/shmstr.h>
 #endif
 
+#include "Trap.h"
+
+#undef  TEST
+#undef  DEBUG
+
 #ifdef EXTMODULE
 #include "xf86_ansic.h"
 #endif
@@ -227,129 +249,175 @@
 int
 ProcXvDispatch(ClientPtr client)
 {
+  int result;
+
   REQUEST(xReq);
 
   UpdateCurrentTime();
 
+  /*
+   * Report upstream that we are
+   * dispatching a XVideo operation.
+   */
+
+  nxagentXvTrap = 1;
+
+  #ifdef TEST
+  fprintf(stderr, "ProcXvDispatch: Going to dispatch XVideo operation [%d] for client [%d].\n", 
+              stuff->data, client -> index);
+  #endif
+
   switch (stuff->data) 
     {
-    case xv_QueryExtension: return(ProcXvQueryExtension(client));
-    case xv_QueryAdaptors: return(ProcXvQueryAdaptors(client));
-    case xv_QueryEncodings: return(ProcXvQueryEncodings(client));
+    case xv_QueryExtension: result = (ProcXvQueryExtension(client)); break;
+    case xv_QueryAdaptors: result = (ProcXvQueryAdaptors(client)); break;
+    case xv_QueryEncodings: result = (ProcXvQueryEncodings(client)); break;
     case xv_PutVideo:
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-            return(XineramaXvPutVideo(client));
+            result = (XineramaXvPutVideo(client)); break;
         else
 #endif
-            return(ProcXvPutVideo(client));
+            result = (ProcXvPutVideo(client)); break;
     case xv_PutStill:
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-            return(XineramaXvPutStill(client));
+            result = (XineramaXvPutStill(client)); break
         else
 #endif
-    	    return(ProcXvPutStill(client));
-    case xv_GetVideo: return(ProcXvGetVideo(client));
-    case xv_GetStill: return(ProcXvGetStill(client));
-    case xv_GrabPort: return(ProcXvGrabPort(client));
-    case xv_UngrabPort: return(ProcXvUngrabPort(client));
-    case xv_SelectVideoNotify: return(ProcXvSelectVideoNotify(client));
-    case xv_SelectPortNotify: return(ProcXvSelectPortNotify(client));
+    	    result = (ProcXvPutStill(client)); break;
+    case xv_GetVideo: result = (ProcXvGetVideo(client)); break;
+    case xv_GetStill: result = (ProcXvGetStill(client)); break;
+    case xv_GrabPort: result = (ProcXvGrabPort(client)); break;
+    case xv_UngrabPort: result = (ProcXvUngrabPort(client)); break;
+    case xv_SelectVideoNotify: result = (ProcXvSelectVideoNotify(client)); break;
+    case xv_SelectPortNotify: result = (ProcXvSelectPortNotify(client)); break;
     case xv_StopVideo: 
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-	    return(XineramaXvStopVideo(client));
+	    result = (XineramaXvStopVideo(client)); break;
 	else
 #endif
-	    return(ProcXvStopVideo(client));
+	    result = (ProcXvStopVideo(client)); break;
     case xv_SetPortAttribute: 
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-	    return(XineramaXvSetPortAttribute(client));
+	    result = (XineramaXvSetPortAttribute(client)); break;
 	else
 #endif
-	    return(ProcXvSetPortAttribute(client));
-    case xv_GetPortAttribute: return(ProcXvGetPortAttribute(client));
-    case xv_QueryBestSize: return(ProcXvQueryBestSize(client));
-    case xv_QueryPortAttributes: return(ProcXvQueryPortAttributes(client));
+	    result = (ProcXvSetPortAttribute(client)); break;
+    case xv_GetPortAttribute: result = (ProcXvGetPortAttribute(client)); break;
+    case xv_QueryBestSize: result = (ProcXvQueryBestSize(client)); break;
+    case xv_QueryPortAttributes: result = (ProcXvQueryPortAttributes(client)); break;
     case xv_PutImage:
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-	    return(XineramaXvPutImage(client));
+	    result = (XineramaXvPutImage(client)); break;
 	else
 #endif
-	    return(ProcXvPutImage(client));
+	    result = (ProcXvPutImage(client)); break;
 #ifdef MITSHM
     case xv_ShmPutImage: 
 #ifdef PANORAMIX
         if(!noPanoramiXExtension)
-	    return(XineramaXvShmPutImage(client));
+	    result = (XineramaXvShmPutImage(client)); break;
 	else
 #endif
-	    return(ProcXvShmPutImage(client));
+	    result = (ProcXvShmPutImage(client)); break;
 #endif
-    case xv_QueryImageAttributes: return(ProcXvQueryImageAttributes(client));
-    case xv_ListImageFormats: return(ProcXvListImageFormats(client));
+    case xv_QueryImageAttributes: result = (ProcXvQueryImageAttributes(client)); break;
+    case xv_ListImageFormats: result = (ProcXvListImageFormats(client)); break;
     default:
       if (stuff->data < xvNumRequests)
 	{
 	  SendErrorToClient(client, XvReqCode, stuff->data, 0, 
 			    BadImplementation);
-	  return(BadImplementation);
+	  result = (BadImplementation); break;
 	}
       else
 	{
 	  SendErrorToClient(client, XvReqCode, stuff->data, 0, BadRequest);
-	  return(BadRequest);
+	  result = (BadRequest);  break;
 	}
     }
+
+  nxagentXvTrap = 0;
+
+  #ifdef TEST
+  fprintf(stderr, "ProcXvDispatch: Dispatched XVideo operation [%d] for client [%d].\n", 
+              stuff->data, client -> index);
+  #endif
+
+  return result;
 }
 
 int
 SProcXvDispatch(ClientPtr client)
 {
+  int result;
+
   REQUEST(xReq);
 
   UpdateCurrentTime();
 
+  /*
+   * Report upstream that we are
+   * dispatching a XVideo operation.
+   */
+
+  nxagentXvTrap = 1;
+
+  #ifdef TEST
+  fprintf(stderr, "SProcXvDispatch: Going to dispatch XVideo operation [%d] for client [%d].\n", 
+              stuff->data, client -> index);
+  #endif
+
   switch (stuff->data) 
     {
-    case xv_QueryExtension: return(SProcXvQueryExtension(client));
-    case xv_QueryAdaptors: return(SProcXvQueryAdaptors(client));
-    case xv_QueryEncodings: return(SProcXvQueryEncodings(client));
-    case xv_PutVideo: return(SProcXvPutVideo(client));
-    case xv_PutStill: return(SProcXvPutStill(client));
-    case xv_GetVideo: return(SProcXvGetVideo(client));
-    case xv_GetStill: return(SProcXvGetStill(client));
-    case xv_GrabPort: return(SProcXvGrabPort(client));
-    case xv_UngrabPort: return(SProcXvUngrabPort(client));
-    case xv_SelectVideoNotify: return(SProcXvSelectVideoNotify(client));
-    case xv_SelectPortNotify: return(SProcXvSelectPortNotify(client));
-    case xv_StopVideo: return(SProcXvStopVideo(client));
-    case xv_SetPortAttribute: return(SProcXvSetPortAttribute(client));
-    case xv_GetPortAttribute: return(SProcXvGetPortAttribute(client));
-    case xv_QueryBestSize: return(SProcXvQueryBestSize(client));
-    case xv_QueryPortAttributes: return(SProcXvQueryPortAttributes(client));
-    case xv_PutImage: return(SProcXvPutImage(client));
+    case xv_QueryExtension: result = (SProcXvQueryExtension(client)); break;
+    case xv_QueryAdaptors: result = (SProcXvQueryAdaptors(client)); break;
+    case xv_QueryEncodings: result = (SProcXvQueryEncodings(client)); break;
+    case xv_PutVideo: result = (SProcXvPutVideo(client)); break;
+    case xv_PutStill: result = (SProcXvPutStill(client)); break;
+    case xv_GetVideo: result = (SProcXvGetVideo(client)); break;
+    case xv_GetStill: result = (SProcXvGetStill(client)); break;
+    case xv_GrabPort: result = (SProcXvGrabPort(client)); break;
+    case xv_UngrabPort: result = (SProcXvUngrabPort(client)); break;
+    case xv_SelectVideoNotify: result = (SProcXvSelectVideoNotify(client)); break;
+    case xv_SelectPortNotify: result = (SProcXvSelectPortNotify(client)); break;
+    case xv_StopVideo: result = (SProcXvStopVideo(client)); break;
+    case xv_SetPortAttribute: result = (SProcXvSetPortAttribute(client)); break;
+    case xv_GetPortAttribute: result = (SProcXvGetPortAttribute(client)); break;
+    case xv_QueryBestSize: result = (SProcXvQueryBestSize(client)); break;
+    case xv_QueryPortAttributes: result = (SProcXvQueryPortAttributes(client)); break;
+    case xv_PutImage: result = (SProcXvPutImage(client)); break;
 #ifdef MITSHM
-    case xv_ShmPutImage: return(SProcXvShmPutImage(client));
+    case xv_ShmPutImage: result = (SProcXvShmPutImage(client)); break;
 #endif
-    case xv_QueryImageAttributes: return(SProcXvQueryImageAttributes(client));
-    case xv_ListImageFormats: return(SProcXvListImageFormats(client));
+    case xv_QueryImageAttributes: result = (SProcXvQueryImageAttributes(client)); break;
+    case xv_ListImageFormats: result = (SProcXvListImageFormats(client)); break;
     default:
       if (stuff->data < xvNumRequests)
 	{
 	  SendErrorToClient(client, XvReqCode, stuff->data, 0, 
 			    BadImplementation);
-	  return(BadImplementation);
+	  result = (BadImplementation); break;
 	}
       else
 	{
 	  SendErrorToClient(client, XvReqCode, stuff->data, 0, BadRequest);
-	  return(BadRequest);
+	  result = (BadRequest); break;
 	}
     }
+
+  nxagentXvTrap = 0;
+
+  #ifdef TEST
+  fprintf(stderr, "ProcXvDispatch: Dispatched XVideo operation [%d] for client [%d].\n", 
+              stuff->data, client -> index);
+  #endif
+
+  return result;
 }
 
 static int
@@ -2215,3 +2283,4 @@
 }
 
 #endif
+