Fix issue with free rtos execute sync (#1979)

Stop handle_sync_func_call removing the worker. Depending on thread priority
this can occur after the memory has gone out of scope in
async_context_freertos_execute_sync.

Fixes #1962
This commit is contained in:
Peter Harper 2024-10-17 19:55:20 +01:00 committed by GitHub
parent 66c7f0f607
commit 91dfbd01e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -188,7 +188,6 @@ static void handle_sync_func_call(async_context_t *context, async_when_pending_w
sync_func_call_t *call = (sync_func_call_t *)worker;
call->rc = call->func(call->param);
xSemaphoreGive(call->sem);
async_context_remove_when_pending_worker(context, worker);
}
uint32_t async_context_freertos_execute_sync(async_context_t *self_base, uint32_t (*func)(void *param), void *param) {
@ -202,6 +201,7 @@ uint32_t async_context_freertos_execute_sync(async_context_t *self_base, uint32_
async_context_add_when_pending_worker(self_base, &call.worker);
async_context_set_work_pending(self_base, &call.worker);
xSemaphoreTake(call.sem, portMAX_DELAY);
async_context_remove_when_pending_worker(self_base, &call.worker);
vSemaphoreDelete(call.sem);
return call.rc;
}