postgres.git / summary / log / commit / refs
commit 4acf99b2f3bb665d2febef183ede5f08b8f7545d
Author: Magnus Hagander <magnus@hagander.net>
Date: Tue Nov 16 11:40:56 2010 +0000
First released in: 9.1.0, 9.0.2
Send paramHandle to subprocesses as 64-bit on Win64
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 | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 25500d4c9b0..65278b510dd 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -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)
{
[parent: 2edc5cd493ce]