postgres.git / summary / log / commit / refs

commit    b2d59ab02ce380daec0b974955d047eb74b0cebb
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Fri Sep 23 14:09:52 2016 +0000

    Don't trust CreateFileMapping() to clear the error code on success.
    
    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 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index ff72d045ea5..8482cd86445 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -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 */ [parent: 32cdf680f19a]