From 05adedcc72978d386d27ecd6b3c113f6a712a783 Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Fri, 20 Dec 2019 21:57:26 +0800 Subject: [PATCH] can: Fix semaphore take in critical section This commit fixes can_reconfigure_alerts() which could lead to a call to xSemaphoreTake() whilst inside a critical section. --- components/driver/can.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/components/driver/can.c b/components/driver/can.c index 0e63905bbe..93aef3511f 100644 --- a/components/driver/can.c +++ b/components/driver/can.c @@ -957,15 +957,16 @@ esp_err_t can_read_alerts(uint32_t *alerts, TickType_t ticks_to_wait) esp_err_t can_reconfigure_alerts(uint32_t alerts_enabled, uint32_t *current_alerts) { CAN_CHECK(p_can_obj != NULL, ESP_ERR_INVALID_STATE); + CAN_ENTER_CRITICAL(); - uint32_t cur_alerts; - can_read_alerts(&cur_alerts, 0); //Clear any unhandled alerts + //Clear any unhandled alerts + if (current_alerts != NULL) { + *current_alerts = p_can_obj->alerts_triggered;; + } + p_can_obj->alerts_triggered = 0; p_can_obj->alerts_enabled = alerts_enabled; //Update enabled alerts CAN_EXIT_CRITICAL(); - if (current_alerts != NULL) { - *current_alerts = cur_alerts; - } return ESP_OK; }