diff --git a/epicardium/modules/mutex.c b/epicardium/modules/mutex.c index 9d58eec080977d93f69f275350a5101a15d4a64b..4fa3eacf93e42a4ba1da5aaada9f660fb0f33b9c 100644 --- a/epicardium/modules/mutex.c +++ b/epicardium/modules/mutex.c @@ -23,6 +23,9 @@ void _mutex_create(struct mutex *m, const char *name) void mutex_lock(struct mutex *m) { + if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) { + return; + } int ret = xSemaphoreTake(m->_rtos_mutex, portMAX_DELAY); /* Ensure locking was actually successful */ @@ -31,12 +34,18 @@ void mutex_lock(struct mutex *m) bool mutex_trylock(struct mutex *m) { + if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) { + return true; + } int ret = xSemaphoreTake(m->_rtos_mutex, 0); return ret == pdTRUE; } void mutex_unlock(struct mutex *m) { + if (xTaskGetSchedulerState() == taskSCHEDULER_NOT_STARTED) { + return; + } /* Ensure that only the owner can unlock a mutex */ assert(mutex_get_owner(m) == xTaskGetCurrentTaskHandle());