OSDN Git Service

2009-04-01 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Apr 2009 09:05:13 +0000 (09:05 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 1 Apr 2009 09:05:13 +0000 (09:05 +0000)
            Andrey Galkin <agalkin@hypercom.com>

        PR/39492
        * config/i386/host-mingw32.c (mingw32_gt_pch_use_address):
        Make object_name unique for each process.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145394 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/host-mingw32.c

index bbb7af8..3209852 100644 (file)
@@ -1,3 +1,10 @@
+2009-04-01  Kai Tietz  <kai.tietz@onevision.com>
+           Andrey Galkin <agalkin@hypercom.com>
+
+       PR/39492
+       * config/i386/host-mingw32.c (mingw32_gt_pch_use_address):
+       Make object_name unique for each process.
+
 2009-04-01  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/39591
index ed8ab10..1d2e59a 100644 (file)
@@ -120,8 +120,19 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
      namespace when running an application in a Terminal Server
      session.  This causes failure since, by default, applications 
      don't get SeCreateGlobalPrivilege. We don't need global
-     memory sharing so explicitly put object into Local namespace.  */
-   const char object_name[] = "Local\\MinGWGCCPCH";
+     memory sharing so explicitly put object into Local namespace.
+
+     There is also another issue, which appears if multiple concurrent
+     GCC processes are using PCH functionality. MapViewOfFileEx returns
+     "Access Denied" error. So we need to make the session-wide mapping
+     name unique. Let's use current process ID for that.  */
+#define OBJECT_NAME_FMT "Local\\MinGWGCCPCH-"
+
+  /* Allocate enough space for name prefix and max possible DWORD
+    hexadecimal representation.  */
+  char object_name[sizeof (OBJECT_NAME_FMT) + sizeof (DWORD) * 2];
+  snprintf (object_name, sizeof (object_name), OBJECT_NAME_FMT "%lx",
+            GetCurrentProcessId());
 
   /* However, the documentation for CreateFileMapping says that on NT4
      and earlier, backslashes are invalid in object name.  So, we need