From ed928d0a601ed13e187f34ea56ec5b405d854878 Mon Sep 17 00:00:00 2001 From: goldsimon Date: Tue, 16 Jan 2018 06:55:49 +0100 Subject: [PATCH] freertos port: fix LWIP_NETCONN_SEM_PER_THREAD --- ports/freertos/sys_arch.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ports/freertos/sys_arch.c b/ports/freertos/sys_arch.c index 74122ff..cf08e73 100644 --- a/ports/freertos/sys_arch.c +++ b/ports/freertos/sys_arch.c @@ -507,11 +507,15 @@ sys_arch_netconn_sem_alloc(void) ret = pvTaskGetThreadLocalStoragePointer(task, 0); if(ret == NULL) { - sys_sem_t sem; - err_t err = sys_sem_new(&sem, 0); + sys_sem_t *sem; + err_t err; + /* need to allocate the memory for this semaphore */ + sem = mem_malloc(sizeof(sys_sem_t)); + LWIP_ASSERT("sem != NULL", sem != NULL); + err = sys_sem_new(sem, 0); LWIP_ASSERT("err == ERR_OK", err == ERR_OK); - LWIP_ASSERT("sem invalid", sys_sem_valid_val(sem)); - vTaskSetThreadLocalStoragePointer(task, 0, &sem); + LWIP_ASSERT("sem invalid", sys_sem_valid(sem)); + vTaskSetThreadLocalStoragePointer(task, 0, sem); } } @@ -525,6 +529,7 @@ void sys_arch_netconn_sem_free(void) if(ret != NULL) { sys_sem_t *sem = ret; sys_sem_free(sem); + mem_free(sem); vTaskSetThreadLocalStoragePointer(task, 0, NULL); } }