Send paramHandle to subprocesses as 64-bit on Win64
authorMagnus Hagander <[email protected]>
Tue, 16 Nov 2010 11:40:56 +0000 (12:40 +0100)
committerMagnus Hagander <[email protected]>
Tue, 16 Nov 2010 11:40:56 +0000 (12:40 +0100)
The handle to the shared memory segment containing startup
parameters was sent as 32-bit even on 64-bit systems. Since
HANDLEs appear to be allocated sequentially this shouldn't
be a problem until we reach 2^32 open handles in the postmaster,
but a 64-bit value should be sent across as 64-bit, and not
zero out the top 32 bits.

Noted by Tom Lane.

src/backend/postmaster/postmaster.c

index 25500d4c9b0f7b92ec29475045648d1e7640b792..65278b510dddbbad9201264cb446bcd14ca1257f 100644 (file)
@@ -3755,7 +3755,11 @@ internal_forkexec(int argc, char *argv[], Port *port)
    }
 
    /* Insert temp file name after --fork argument */
+#ifdef _WIN64
+   sprintf(paramHandleStr, "%llu", (LONG_PTR) paramHandle);
+#else
    sprintf(paramHandleStr, "%lu", (DWORD) paramHandle);
+#endif
    argv[2] = paramHandleStr;
 
    /* Format the cmd line */
@@ -4825,7 +4829,11 @@ read_backend_variables(char *id, Port *port)
    HANDLE      paramHandle;
    BackendParameters *paramp;
 
+#ifdef _WIN64
+   paramHandle = (HANDLE) _atoi64(id);
+#else
    paramHandle = (HANDLE) atol(id);
+#endif
    paramp = MapViewOfFile(paramHandle, FILE_MAP_READ, 0, 0, 0);
    if (!paramp)
    {