]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Don't trust CreateFileMapping() to clear the error code on success.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 23 Sep 2016 14:09:52 +0000 (10:09 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 23 Sep 2016 14:09:52 +0000 (10:09 -0400)
We must test GetLastError() even when CreateFileMapping() returns a
non-null handle.  If that value were left over from some previous system
call, we might be fooled into thinking the segment already existed.
Experimentation on Windows 7 suggests that CreateFileMapping() clears
the error code on success, but it is not documented to do so, so let's
not rely on that happening in all Windows releases.

Amit Kapila

Discussion: <20811.1474390987@sss.pgh.pa.us>

src/backend/storage/ipc/dsm_impl.c

index 72402678be06e90863cbf8f7c9999ecbb5c6bc8d..c611ab0bafd7ec3fe2133bf1a887b70103d1577c 100644 (file)
@@ -681,6 +681,9 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
 #endif
                size_low = (DWORD) request_size;
 
+               /* CreateFileMapping might not clear the error code on success */
+               SetLastError(0);
+
                hmap = CreateFileMapping(INVALID_HANDLE_VALUE,  /* Use the pagefile */
                                                                 NULL,  /* Default security attrs */
                                                                 PAGE_READWRITE,                /* Memory is read/write */