You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ja...@apache.org on 2023/09/20 06:50:48 UTC
[mynewt-nimble] branch master updated: porting/linux: fix deadlock in ble_npl_hw_enter_critical
This is an automated email from the ASF dual-hosted git repository.
janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git
The following commit(s) were added to refs/heads/master by this push:
new 9d4f474b porting/linux: fix deadlock in ble_npl_hw_enter_critical
9d4f474b is described below
commit 9d4f474bf8c867a289e8111aa1cc43fedf7b0b62
Author: Hang Fan <fa...@gmail.com>
AuthorDate: Sun Sep 10 14:33:07 2023 +0800
porting/linux: fix deadlock in ble_npl_hw_enter_critical
Fix wrong mutex attributes in pthread_mutexattr_settype.
It can cause deadlock after locked.
Signed-off-by: Hang Fan <fa...@gmail.com>
---
porting/npl/linux/src/os_atomic.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/porting/npl/linux/src/os_atomic.c b/porting/npl/linux/src/os_atomic.c
index b01e234b..743a8470 100644
--- a/porting/npl/linux/src/os_atomic.c
+++ b/porting/npl/linux/src/os_atomic.c
@@ -23,21 +23,21 @@
#include "nimble/nimble_npl.h"
-static pthread_mutex_t s_mutex = PTHREAD_MUTEX_INITIALIZER;
+static struct ble_npl_mutex s_mutex;
static uint8_t s_mutex_inited = 0;
uint32_t ble_npl_hw_enter_critical(void)
{
if( !s_mutex_inited ) {
- pthread_mutexattr_settype(&s_mutex, PTHREAD_MUTEX_RECURSIVE);
+ ble_npl_mutex_init(&s_mutex);
s_mutex_inited = 1;
}
- pthread_mutex_lock(&s_mutex);
+ pthread_mutex_lock(&s_mutex.lock);
return 0;
}
void ble_npl_hw_exit_critical(uint32_t ctx)
{
- pthread_mutex_unlock(&s_mutex);
+ pthread_mutex_unlock(&s_mutex.lock);
}