summaryrefslogtreecommitdiffstats
path: root/winsup/cygserver/sysv_shm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygserver/sysv_shm.cc')
-rw-r--r--winsup/cygserver/sysv_shm.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygserver/sysv_shm.cc b/winsup/cygserver/sysv_shm.cc
index 70ed1a3d4..7d038f0a6 100644
--- a/winsup/cygserver/sysv_shm.cc
+++ b/winsup/cygserver/sysv_shm.cc
@@ -808,6 +808,12 @@ shmget(struct thread *td, struct shmget_args *uap)
mode = uap->shmflg & ACCESSPERMS;
if (uap->key != IPC_PRIVATE) {
again:
+#ifdef __CYGWIN__
+ if (uap->shmflg & IPC_KEY_IS_SHMID)
+ segnum = shm_find_segment_by_shmid ((int) uap->key) ?
+ IPCID_TO_IX((int) uap->key) : -1;
+ else
+#endif
segnum = shm_find_segment_by_key(uap->key);
if (segnum >= 0) {
error = shmget_existing(td, uap, mode, segnum);