Print this page
OS-5223 removed shm segment is no longer available
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
*** 18,27 ****
--- 18,28 ----
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright 2016 Joyent, Inc.
*/
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
/* All Rights Reserved */
*** 1215,1225 ****
--- 1216,1243 ----
IPC_ZONE_USAGE(perm, service) -= 1;
ASSERT(service->ipcs_count || ((IPC_PROJ_USAGE(perm, service) == 0) &&
(IPC_ZONE_USAGE(perm, service) == 0)));
}
+ /*
+ * Perform actual IPC_RMID, either via ipc_rmid or due to a delayed *_RMID.
+ */
+ void
+ ipc_rmsvc(ipc_service_t *service, kipc_perm_t *perm)
+ {
+ ASSERT(service->ipcs_count > 0);
+ ASSERT(MUTEX_HELD(&service->ipcs_lock));
+ ipc_remove(service, perm);
+ mutex_exit(&service->ipcs_lock);
+
+ /* perform any per-service removal actions */
+ service->ipcs_rmid(perm);
+
+ ipc_rele(service, perm);
+ }
+
/*
* Common code to perform an IPC_RMID. Returns an errno value on
* failure, 0 on success.
*/
int
*** 1245,1262 ****
}
/*
* Nothing can fail from this point on.
*/
! ipc_remove(service, perm);
! mutex_exit(&service->ipcs_lock);
- /* perform any per-service removal actions */
- service->ipcs_rmid(perm);
-
- ipc_rele(service, perm);
-
return (0);
}
/*
* Implementation for shmids, semids, and msgids. buf is the address
--- 1263,1274 ----
}
/*
* Nothing can fail from this point on.
*/
! ipc_rmsvc(service, perm);
return (0);
}
/*
* Implementation for shmids, semids, and msgids. buf is the address