diff --git a/src/backend/storage/ipc/dsm.c b/src/backend/storage/ipc/dsm.c
index 321bad95461d0036f6c3d043ab14a8da6298a5e7..29e46c28b42c099ea5a87f4b4330694df0072dd7 100644
--- a/src/backend/storage/ipc/dsm.c
+++ b/src/backend/storage/ipc/dsm.c
@@ -502,6 +502,7 @@ dsm_create(Size size, int flags)
 	{
 		if ((flags & DSM_CREATE_NULL_IF_MAXSEGMENTS) != 0)
 		{
+			LWLockRelease(DynamicSharedMemoryControlLock);
 			dsm_impl_op(DSM_OP_DESTROY, seg->handle, 0, &seg->impl_private,
 						&seg->mapped_address, &seg->mapped_size, WARNING);
 			if (seg->resowner != NULL)