diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-05-05 21:51:46 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-05-05 21:51:46 +0000 |
commit | 2fe0f2962c965a3da107a881cc1f697217465a0e (patch) | |
tree | cc6fb84bc691e3619236837483404e2f58b5f067 | |
parent | 1bbbcb04f06ff119bdf696a5228181b7136f20b9 (diff) | |
download | postgresql-2fe0f2962c965a3da107a881cc1f697217465a0e.tar.gz postgresql-2fe0f2962c965a3da107a881cc1f697217465a0e.zip |
Minor improvement: avoid assuming that GetLastError value cannot be
affected by CloseHandle() or Sleep().
-rw-r--r-- | src/backend/port/win32_shmem.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/backend/port/win32_shmem.c b/src/backend/port/win32_shmem.c index ed485ea80f8..5651a31e44c 100644 --- a/src/backend/port/win32_shmem.c +++ b/src/backend/port/win32_shmem.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/port/win32_shmem.c,v 1.9 2009/05/05 09:48:51 mha Exp $ + * $PostgreSQL: pgsql/src/backend/port/win32_shmem.c,v 1.10 2009/05/05 21:51:46 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -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."))); |