diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c index a31de0c27f4..fc3181582be 100644 --- a/src/backend/storage/ipc/dsm_impl.c +++ b/src/backend/storage/ipc/dsm_impl.c @@ -288,7 +288,7 @@ dsm_impl_posix(dsm_op op, dsm_handle handle, Size request_size, flags = O_RDWR | (op == DSM_OP_CREATE ? O_CREAT | O_EXCL : 0); if ((fd = shm_open(name, flags, 0600)) == -1) { - if (errno != EEXIST) + if (op == DSM_OP_ATTACH || errno != EEXIST) ereport(elevel, (errcode_for_dynamic_shared_memory(), errmsg("could not open shared memory segment \"%s\": %m", @@ -564,7 +564,7 @@ dsm_impl_sysv(dsm_op op, dsm_handle handle, Size request_size, if ((ident = shmget(key, segsize, flags)) == -1) { - if (errno != EEXIST) + if (op == DSM_OP_ATTACH || errno != EEXIST) { int save_errno = errno; @@ -897,7 +897,7 @@ dsm_impl_mmap(dsm_op op, dsm_handle handle, Size request_size, flags = O_RDWR | (op == DSM_OP_CREATE ? O_CREAT | O_EXCL : 0); if ((fd = OpenTransientFile(name, flags, 0600)) == -1) { - if (errno != EEXIST) + if (op == DSM_OP_ATTACH || errno != EEXIST) ereport(elevel, (errcode_for_dynamic_shared_memory(), errmsg("could not open shared memory segment \"%s\": %m",