diff options
author | Magnus Hagander <magnus@hagander.net> | 2010-11-16 12:40:56 +0100 |
---|---|---|
committer | Magnus Hagander <magnus@hagander.net> | 2010-11-16 12:40:56 +0100 |
commit | 4acf99b2f3bb665d2febef183ede5f08b8f7545d (patch) | |
tree | b2c7c55e3b7d79737df3a73a5e0dd5447cf117af /src | |
parent | 2edc5cd493ce3d7834026970e9d3cd00e203f51a (diff) | |
download | postgresql-4acf99b2f3bb665d2febef183ede5f08b8f7545d.tar.gz postgresql-4acf99b2f3bb665d2febef183ede5f08b8f7545d.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 8 |
1 files changed, 8 insertions, 0 deletions
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) { |