Skip to content

Commit

Permalink
Fix issue with free rtos execute sync
Browse files Browse the repository at this point in the history
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 raspberrypi#1962
  • Loading branch information
peterharperuk committed Oct 8, 2024
1 parent bd5523c commit 6800b12
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/rp2_common/pico_async_context/async_context_freertos.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
}
Expand Down

0 comments on commit 6800b12

Please sign in to comment.