aboutsummaryrefslogtreecommitdiff
path: root/src/backend/storage/ipc/dsm_impl.c
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2014-04-16 12:04:44 -0400
committerRobert Haas <rhaas@postgresql.org>2014-04-16 12:04:44 -0400
commit1a81daab8be9a0b3769a2660db44a56a6035e34a (patch)
tree3ca3fdba6aa2edb4717765ac094a6ce099b7e210 /src/backend/storage/ipc/dsm_impl.c
parented4a26260c6ebd7948eacc42eddae1e898239f6e (diff)
downloadpostgresql-1a81daab8be9a0b3769a2660db44a56a6035e34a.tar.gz
postgresql-1a81daab8be9a0b3769a2660db44a56a6035e34a.zip
Try to fix spurious DSM failures on Windows.
Apparently, Windows can sometimes return an error code even when the operation actually worked just fine. Rearrange the order of checks according to what appear to be the best practices in this area. Amit Kapila
Diffstat (limited to 'src/backend/storage/ipc/dsm_impl.c')
-rw-r--r--src/backend/storage/ipc/dsm_impl.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c
index b1519c97878..fa253f0af53 100644
--- a/src/backend/storage/ipc/dsm_impl.c
+++ b/src/backend/storage/ipc/dsm_impl.c
@@ -693,6 +693,15 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
size_high, /* Upper 32 bits of size */
size_low, /* Lower 32 bits of size */
name);
+ if (!hmap)
+ {
+ _dosmaperr(GetLastError());
+ ereport(elevel,
+ (errcode_for_dynamic_shared_memory(),
+ errmsg("could not create shared memory segment \"%s\": %m",
+ name)));
+ return false;
+ }
_dosmaperr(GetLastError());
if (errno == EEXIST)
{
@@ -711,16 +720,15 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
hmap = OpenFileMapping(FILE_MAP_WRITE | FILE_MAP_READ,
FALSE, /* do not inherit the name */
name); /* name of mapping object */
- _dosmaperr(GetLastError());
- }
-
- if (!hmap)
- {
- ereport(elevel,
- (errcode_for_dynamic_shared_memory(),
- errmsg("could not open shared memory segment \"%s\": %m",
- name)));
- return false;
+ if (!hmap)
+ {
+ _dosmaperr(GetLastError());
+ ereport(elevel,
+ (errcode_for_dynamic_shared_memory(),
+ errmsg("could not open shared memory segment \"%s\": %m",
+ name)));
+ return false;
+ }
}
/* Map it. */