diff options
-rw-r--r-- | src/backend/storage/ipc/dsm.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c index 733fa5f7bd3..a5c008463a9 100644 --- a/src/backend/storage/ipc/dsm.c +++ b/src/backend/storage/ipc/dsm.c @@ -566,6 +566,10 @@ dsm_attach(dsm_handle h) if (dsm_control->item[i].refcnt == 0) continue; + /* If the handle doesn't match, it's not the slot we want. */ + if (dsm_control->item[i].handle != seg->handle) + continue; + /* * If the reference count is 1, the slot is still in use, but the * segment is in the process of going away. Treat that as if we @@ -574,13 +578,10 @@ dsm_attach(dsm_handle h) if (dsm_control->item[i].refcnt == 1) break; - /* Otherwise, if the descriptor matches, we've found a match. */ - if (dsm_control->item[i].handle == seg->handle) - { - dsm_control->item[i].refcnt++; - seg->control_slot = i; - break; - } + /* Otherwise we've found a match. */ + dsm_control->item[i].refcnt++; + seg->control_slot = i; + break; } LWLockRelease(DynamicSharedMemoryControlLock); |