From 93b88935999ad25bc22daf64f9ebff30957e0a27 Mon Sep 17 00:00:00 2001 From: Marcio Barbosa Date: Mon, 21 Mar 2022 14:43:34 -0300 Subject: [PATCH] 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 Reviewed-by: Mark Vitale Tested-by: Mark Vitale Reviewed-by: Benjamin Kaduk --- src/afs/DARWIN/osi_sleep.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/afs/DARWIN/osi_sleep.c b/src/afs/DARWIN/osi_sleep.c index 0e87d05b6d..b514171db3 100644 --- a/src/afs/DARWIN/osi_sleep.c +++ b/src/afs/DARWIN/osi_sleep.c @@ -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);