Commit 1a81daab authored by Robert Haas's avatar Robert Haas

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
parent ed4a2626
...@@ -693,6 +693,15 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size, ...@@ -693,6 +693,15 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
size_high, /* Upper 32 bits of size */ size_high, /* Upper 32 bits of size */
size_low, /* Lower 32 bits of size */ size_low, /* Lower 32 bits of size */
name); 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()); _dosmaperr(GetLastError());
if (errno == EEXIST) if (errno == EEXIST)
{ {
...@@ -711,17 +720,16 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size, ...@@ -711,17 +720,16 @@ dsm_impl_windows(dsm_op op, dsm_handle handle, Size request_size,
hmap = OpenFileMapping(FILE_MAP_WRITE | FILE_MAP_READ, hmap = OpenFileMapping(FILE_MAP_WRITE | FILE_MAP_READ,
FALSE, /* do not inherit the name */ FALSE, /* do not inherit the name */
name); /* name of mapping object */ name); /* name of mapping object */
_dosmaperr(GetLastError());
}
if (!hmap) if (!hmap)
{ {
_dosmaperr(GetLastError());
ereport(elevel, ereport(elevel,
(errcode_for_dynamic_shared_memory(), (errcode_for_dynamic_shared_memory(),
errmsg("could not open shared memory segment \"%s\": %m", errmsg("could not open shared memory segment \"%s\": %m",
name))); name)));
return false; return false;
} }
}
/* Map it. */ /* Map it. */
address = MapViewOfFile(hmap, FILE_MAP_WRITE | FILE_MAP_READ, address = MapViewOfFile(hmap, FILE_MAP_WRITE | FILE_MAP_READ,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment