From 96b9649aa48877dade4de4ba255b9ebb661e95e0 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Thu, 25 Aug 2016 14:27:36 +0800 Subject: [PATCH] newlib locking: Fix bug w/ _lock_close not clearing semaphore handle --- components/esp32/syscalls.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/esp32/syscalls.c b/components/esp32/syscalls.c index 60af7f97c1..636e32670e 100644 --- a/components/esp32/syscalls.c +++ b/components/esp32/syscalls.c @@ -258,7 +258,7 @@ void IRAM_ATTR _lock_close(_lock_t *lock) { configASSERT(xSemaphoreGetMutexHolder(h) == NULL); /* mutex should not be held */ #endif vSemaphoreDelete(h); - h = NULL; + *lock = 0; } portEXIT_CRITICAL(&lock_init_spinlock); } @@ -275,9 +275,9 @@ static int IRAM_ATTR lock_acquire_generic(_lock_t *lock, uint32_t delay, uint8_t /* lazy initialise lock - might have had a static initializer in newlib (that we don't use), or _lock_init might have been called before the scheduler was running... */ lock_init_generic(lock, mutex_type); + h = (xSemaphoreHandle)(*lock); + configASSERT(h != NULL); } - h = (xSemaphoreHandle)(*lock); /* re-check after lock_init_generic */ - configASSERT(h != NULL); BaseType_t success; if (cpu_in_interrupt_context()) { -- 2.40.0