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