rpc_J_PL1.diff

Greg Turner gmturner007 at ameritech.net
Mon Dec 2 03:16:47 CST 2002


License: X11-MIT

Changelog:

* dlls/rpcrt4: rpcss_np_client;
  include/wine: rpcss_shared.h;
  programs/rpcss: rpcss.h, rpcss_main.c, rpcss_np_server.c:
  Greg Turner <gmturner007 at ameritech.net>
- rename NAME_RPCSS_NAMED_PIPE to RPCSS_NAMED_PIPE_NAME for consistiency
- add RPCSS_NP_VARIANT, RPCSS_NP_SERVER_WORK_EVENT_NAME constants
- move some stuff where it should be
- add RPCSS_ where appropriate (everywhere :)

--
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/dlls/rpcrt4/rpcss_np_client.c ./dlls/rpcrt4/rpcss_np_client.c
--- ../wine.test/dlls/rpcrt4/rpcss_np_client.c	2002-12-02 01:34:58.000000000 -0600
+++ .c	2002-12-02 01:35:38.000000000 -0600
@@ -52,7 +52,7 @@
 
     /* try to open the client side of the named pipe. */
     the_pipe = CreateFileA(
-      NAME_RPCSS_NAMED_PIPE,           /* pipe name */
+      RPCSS_NAMED_PIPE_NAME,           /* pipe name */
       GENERIC_READ | GENERIC_WRITE,    /* r/w access */
       0,                               /* no sharing */
       NULL,                            /* no security attributes */
@@ -66,7 +66,7 @@
 
     if (GetLastError() != ERROR_PIPE_BUSY) {
       WARN("Unable to open named pipe %s (assuming unavailable).\n", 
-        debugstr_a(NAME_RPCSS_NAMED_PIPE));
+        debugstr_a(RPCSS_NAMED_PIPE_NAME));
       the_pipe = NULL;
       break;
     }
@@ -78,7 +78,7 @@
 
     /* wait for the named pipe.  We are only 
        willing to wait only 5 seconds.  It should be available /very/ soon. */
-    if (! WaitNamedPipeA(NAME_RPCSS_NAMED_PIPE, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
+    if (! WaitNamedPipeA(RPCSS_NAMED_PIPE_NAME, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
     {
       ERR("Named pipe unavailable after waiting.  Something is probably wrong.\n");
       return NULL;
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/include/wine/rpcss_shared.h ./include/wine/rpcss_shared.h
--- ../wine.test/include/wine/rpcss_shared.h	2002-12-02 01:34:58.000000000 -0600
+++ ./include/wine/rpcss_shared.h	2002-12-02 01:35:38.000000000 -0600
@@ -11,18 +11,21 @@
 #define RPCSS_STRINGIFY_MACRO(x) RPCSS_STRINGIFY_MACRO2(x)
 #define RPCSS_STRINGIFY_MACRO2(x) #x
 
+ /* changing this should allow simultanously running rpcss instances
+  * to remain separate; this should be good enough for wine packagers and
+  * forks, which might need to keep their rpcss servers isolated from those
+  * generated by the tarballs, or for crude multiuser experiments.
+  */
+#define RPCSS_NP_VARIANT "-wine-"
+
 #define STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION \
   RPCSS_STRINGIFY_MACRO(RPCSS_NP_PROTOCOL_VERSION)
 
-/* only local communications are supported so far on this pipe.
-   until this changes, we can just use a constant pipe-name */
-#define NAME_RPCSS_NAMED_PIPE \
-  ("\\\\.\\pipe\\RpcssNP" STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION)
-
-/* mutex is local only... perhaps this ought to be part of the pipe
-   protocol for remote wine<->wine connections? */
+#define RPCSS_NAMED_PIPE_NAME \
+  ("\\\\.\\pipe\\RpcssNP" RPCSS_NP_VARIANT STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION)
+  
 #define RPCSS_MASTER_MUTEX_NAME \
-  ("RPCSSMasterMutex" STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION)
+  ("RPCSSMasterMutex" RPCSS_NP_VARIANT STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION)
 
 /* payloads above 1K are fragmented into multiple messages */
 #define VARDATA_PAYLOAD_BYTES 1024 
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/programs/rpcss/rpcss.h ./programs/rpcss/rpcss.h
--- ../wine.test/programs/rpcss/rpcss.h	2002-12-02 01:34:58.000000000 -0600
+++ ./programs/rpcss/rpcss.h	2002-12-02 01:35:38.000000000 -0600
@@ -4,6 +4,12 @@
 #include "wine/rpcss_shared.h"
 #include "windows.h"
 
+/* the "MasterMutex" is coupled with the "ServerWorkEvent" on the (rpcss) server-
+   side to provide atomicity of message processing, and ensure only one rpcss
+   is alive at a time */
+#define RPCSS_NP_SERVER_WORK_EVENT_NAME \
+  ("RPCSSNPSrvWrkEvt" RPCSS_NP_VARIANT STRINGIFIED_RPCSS_NP_PROTOCOL_VERSION)
+
 /* in seconds */
 #define RPCSS_DEFAULT_MAX_LAZY_TIMEOUT 30
 
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/programs/rpcss/rpcss_main.c ./programs/rpcss/rpcss_main.c
--- ../wine.test/programs/rpcss/rpcss_main.c	2002-12-02 01:34:58.000000000 -0600
+++ ./programs/rpcss/rpcss_main.c	2002-12-02 01:35:38.000000000 -0600
@@ -67,27 +67,19 @@
 static HANDLE master_mutex;
 static long max_lazy_timeout = RPCSS_DEFAULT_MAX_LAZY_TIMEOUT;
 
+/* when do we just give up and bail? (UTC) */
+static SYSTEMTIME lazy_timeout_time;
+
 HANDLE RPCSS_GetMasterMutex() 
 {
   return master_mutex;
 }
 
-void RPCSS_SetMaxLazyTimeout(long mlt)
-{
-  /* FIXME: this max ensures that no caller will decrease our wait time,
-     but could have other bad results.  fix: Store "next_max_lazy_timeout" 
-     and install it as neccesary next time we "do work"? */
-  max_lazy_timeout = max(RPCSS_GetLazyTimeRemaining(), mlt);
-}
-
 long RPCSS_GetMaxLazyTimeout()
 {
   return max_lazy_timeout;
 }
 
-/* when do we just give up and bail? (UTC) */
-static SYSTEMTIME lazy_timeout_time;
-
 #if defined(NONAMELESSSTRUCT)
   #define FILETIME_TO_ULARGEINT(filetime, ularge) \
     ( ularge.s.LowPart = filetime.dwLowDateTime, \
@@ -153,18 +145,23 @@
 #undef ULARGEINT_TO_FILETIME
 #undef TEN_MIL
 
-BOOL RPCSS_work()
+BOOL RPCSS_Work()
 {
   return RPCSS_NPDoWork();
 }
 
-BOOL RPCSS_Empty()
+void RPCSS_SetMaxLazyTimeout(long mlt)
 {
-  BOOL rslt = TRUE;
-
-  rslt = RPCSS_EpmapEmpty();
+  /* FIXME: this max ensures that no caller will decrease our wait time,
+     but could have other bad results.  fix: Store "next_max_lazy_timeout" 
+     and install it as neccesary next time we "do work"? */
+  max_lazy_timeout = max(RPCSS_GetLazyTimeRemaining(), mlt);
+}
 
-  return rslt;
+BOOL RPCSS_Empty()
+{
+  /* for now the only datastructure we check is the endpoint map */
+  return RPCSS_EpmapEmpty();
 }
 
 BOOL RPCSS_ReadyToDie()
@@ -222,7 +219,7 @@
     did_something_new = FALSE;
 
     while ( (! did_something_new) && (! RPCSS_ReadyToDie()) )
-      did_something_new = (RPCSS_work() || did_something_new);
+      did_something_new = (RPCSS_Work() || did_something_new);
 
     if ((! did_something_new) && RPCSS_ReadyToDie())
       break; /* that's it for us */
diff -ur -x CVS -x 'bigdif*' -x autom4te.cache ../wine.test/programs/rpcss/rpcss_np_server.c ./programs/rpcss/rpcss_np_server.c
--- ../wine.test/programs/rpcss/rpcss_np_server.c	2002-12-02 01:34:58.000000000 -0600
+++ ./programs/rpcss/rpcss_np_server.c	2002-12-02 01:35:38.000000000 -0600
@@ -163,7 +163,7 @@
 }
 
 /* each message gets its own thread.  this is it. */
-VOID HandlerThread(LPVOID lpvPipeHandle)
+VOID RPCSS_HandlerThread(LPVOID lpvPipeHandle)
 {
   RPCSS_NP_MESSAGE msg, vardata_payload_msg;
   char *c, *vardata = NULL;
@@ -250,7 +250,7 @@
   InterlockedDecrement(&srv_thread_count);
 }
 
-VOID NPMainWorkThread(LPVOID ignored)
+VOID RPCSS_NPMainWorkThread(LPVOID ignored)
 {
   BOOL connected;
   HANDLE hthread, master_mutex = RPCSS_GetMasterMutex();
@@ -273,7 +273,7 @@
       hthread = CreateThread( 
         NULL,                      /* no security attribute */ 
         0,                         /* default stack size */
-        (LPTHREAD_START_ROUTINE) HandlerThread, 
+        (LPTHREAD_START_ROUTINE) RPCSS_HandlerThread, 
         (LPVOID) np_server_end,    /* thread parameter */
         0,                         /* not suspended */
         &threadid                  /* returns thread ID  (not used) */
@@ -304,7 +304,7 @@
         } else {
 	  /* now create a new named pipe instance to listen on */
           np_server_end = CreateNamedPipe(
-            NAME_RPCSS_NAMED_PIPE,                                 /* pipe name */
+            RPCSS_NAMED_PIPE_NAME,                                 /* pipe name */
             PIPE_ACCESS_DUPLEX,                                    /* pipe open mode */
             PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, /* pipe-specific modes */
             PIPE_UNLIMITED_INSTANCES,                              /* maximum instances */
@@ -357,7 +357,7 @@
 
     /* try to open the client side of the named pipe. */
     the_pipe = CreateFileA(
-      NAME_RPCSS_NAMED_PIPE,           /* pipe name */
+      RPCSS_NAMED_PIPE_NAME,           /* pipe name */
       GENERIC_READ | GENERIC_WRITE,    /* r/w access */
       0,                               /* no sharing */
       NULL,                            /* no security attributes */
@@ -371,7 +371,7 @@
 
     if (GetLastError() != ERROR_PIPE_BUSY) {
       WINE_WARN("Unable to open named pipe %s (assuming unavailable).\n", 
-        wine_dbgstr_a(NAME_RPCSS_NAMED_PIPE));
+        wine_dbgstr_a(RPCSS_NAMED_PIPE_NAME));
       the_pipe = NULL;
       break;
     }
@@ -383,7 +383,7 @@
 
     /* wait for the named pipe.  We are only 
        willing to wait only 5 seconds.  It should be available /very/ soon. */
-    if (! WaitNamedPipeA(NAME_RPCSS_NAMED_PIPE, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
+    if (! WaitNamedPipeA(RPCSS_NAMED_PIPE_NAME, MASTER_MUTEX_WAITNAMEDPIPE_TIMEOUT))
     {
       WINE_ERR("Named pipe unavailable after waiting.  Something is probably wrong.\n");
       return NULL;
@@ -410,6 +410,8 @@
 
   WINE_TRACE("(np == %p, msg == %p, reply == %p)\n", np, msg, reply);
 
+  if (msg->vardata_payload_size) return FALSE;
+
   if (! WriteFile(np, msg, sizeof(RPCSS_NP_MESSAGE), &count, NULL)) {
     WINE_ERR("write failed.\n");
     return FALSE;
@@ -478,7 +480,7 @@
     rslt = FALSE;
   }
   if (rslt) {
-    np_server_work_event = CreateEventA(NULL, FALSE, FALSE, "RpcNpServerWorkEvent");
+    np_server_work_event = CreateEventA(NULL, FALSE, FALSE, RPCSS_NP_SERVER_WORK_EVENT_NAME);
     if (np_server_work_event == NULL) {
       /* dunno what we can do then */
       WINE_ERR("Unable to create the np_server_work_event\n");
@@ -487,7 +489,7 @@
     InitializeCriticalSection(&np_server_cs);
 
     np_server_end = CreateNamedPipe(
-      NAME_RPCSS_NAMED_PIPE,                                   /* pipe name */
+      RPCSS_NAMED_PIPE_NAME,                                   /* pipe name */
       PIPE_ACCESS_DUPLEX,                                      /* pipe open mode */
       PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,   /* pipe-specific modes */
       PIPE_UNLIMITED_INSTANCES,                                /* maximum number of instances */
@@ -515,7 +517,7 @@
     hthread = CreateThread( 
       NULL,                      /* no security attribute */ 
       0,                         /* default stack size */
-      (LPTHREAD_START_ROUTINE) NPMainWorkThread,
+      (LPTHREAD_START_ROUTINE) RPCSS_NPMainWorkThread,
       (LPVOID) NULL,             /* thread parameter */
       0,                         /* not suspended */
       &threadid                  /* returns thread ID  (not used) */
-- 
gmt




More information about the wine-patches mailing list