Skip to content

Commit

Permalink
porting/linux: fix deadlock in ble_npl_hw_enter_critical
Browse files Browse the repository at this point in the history
Fix wrong mutex attributes in pthread_mutexattr_settype.
It can cause deadlock after locked.

Signed-off-by: Hang Fan <[email protected]>
  • Loading branch information
Fanhang32 authored and sjanc committed Sep 20, 2023
1 parent c1e2637 commit 9d4f474
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions porting/npl/linux/src/os_atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

0 comments on commit 9d4f474

Please sign in to comment.