From 78de92de0ddb5de67ceb70bd30ff6dfae345baf1 Mon Sep 17 00:00:00 2001 From: Benoît Ganne Date: Wed, 20 Jan 2021 19:10:59 +0100 Subject: svm: use standard function to reset stale mutex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoid accessing the private data structure of mutexes which is implementation-dependent, eg. musl is different from glibc. Type: improvement Change-Id: I20ec0c1c9faef0749d89a1969cd2430c80ac04b3 Signed-off-by: Benoît Ganne --- src/svm/svm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/svm') diff --git a/src/svm/svm.c b/src/svm/svm.c index 2834524b934..313fe4a8787 100644 --- a/src/svm/svm.c +++ b/src/svm/svm.c @@ -716,12 +716,17 @@ svm_map_region (svm_map_region_args_t * a) pid_holding_region_lock = rp->mutex_owner_pid; if (pid_holding_region_lock && kill (pid_holding_region_lock, 0) < 0) { + pthread_mutexattr_t attr; clib_warning ("region %s mutex held by dead pid %d, tag %d, force unlock", rp->region_name, pid_holding_region_lock, rp->mutex_owner_tag); /* owner pid is nonexistent */ - rp->mutex.__data.__owner = 0; - rp->mutex.__data.__lock = 0; + if (pthread_mutexattr_init (&attr)) + clib_unix_warning ("mutexattr_init"); + if (pthread_mutexattr_setpshared (&attr, PTHREAD_PROCESS_SHARED)) + clib_unix_warning ("mutexattr_setpshared"); + if (pthread_mutex_init (&rp->mutex, &attr)) + clib_unix_warning ("mutex_init"); dead_region_recovery = 1; } -- cgit 1.2.3-korg