From 26fe3964b4273460d41cac9481b83de657cac733 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 5 May 2009 21:51:46 +0000 Subject: [PATCH] Minor improvement: avoid assuming that GetLastError value cannot be affected by CloseHandle() or Sleep(). --- src/backend/port/win32_shmem.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index 05c35eb009..c177d008d8 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -158,12 +158,13 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port) /* * If the segment already existed, CreateFileMapping() will return a - * handle to the existing one. + * handle to the existing one and set ERROR_ALREADY_EXISTS. */ if (GetLastError() == ERROR_ALREADY_EXISTS) { - CloseHandle(hmap); /* Close the old handle, since we got a valid + CloseHandle(hmap); /* Close the handle, since we got a valid * one to the previous segment. */ + hmap = NULL; Sleep(1000); continue; } @@ -171,10 +172,10 @@ PGSharedMemoryCreate(Size size, bool makePrivate, int port) } /* - * If the last call in the loop still returned ERROR_ALREADY_EXISTS, this shared memory - * segment exists and we assume it belongs to somebody else. + * If the last call in the loop still returned ERROR_ALREADY_EXISTS, this + * shared memory segment exists and we assume it belongs to somebody else. */ - if (GetLastError() == ERROR_ALREADY_EXISTS) + if (!hmap) ereport(FATAL, (errmsg("pre-existing shared memory block is still in use"), errhint("Check if there are any old server processes still running, and terminate them."))); -- 2.39.5