DARWIN: Drop afs_event lock before destroying it

On macOS arm64, a lock (lck_mtx_t) must be released (lck_mtx_unlock)
before it can be destroyed/freed (lck_mtx_free -> lck_mtx_destroy). If
this rules isn't respected, the operating system in question will panic
with the following message:

  panic("lck_mtx_assert(): mutex (%p) not owned", lock);

Unfortunately, the current shutdown process of the osi_sleep module
doesn't respect this rule. As a result, macOS arm64 panics when the
OpenAFS client is shut down/restarted. To fix this problem, release
afs_event->lck (EVTLOCK_UNLOCK) before destroying it (EVTLOCK_DESTROY).

Change-Id: Ifd39fd99c237c783ed98079573fd4043ebab363b
Reviewed-on: https://gerrit.openafs.org/14933
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
Tested-by: Mark Vitale <mvitale@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
This commit is contained in:
Marcio Barbosa 2022-03-21 14:43:34 -03:00 committed by Benjamin Kaduk
parent 7cfbb087b9
commit 93b8893599

View File

@ -314,6 +314,7 @@ shutdown_osisleep(void) {
EVTLOCK_LOCK(evp);
nevp = evp->next;
if (evp->refcount == 0) {
EVTLOCK_UNLOCK(evp);
EVTLOCK_DESTROY(evp);
*pevpp = evp->next;
osi_FreeSmallSpace(evp);