esp_event: fix memory leaks
Closes https://github.com/espressif/esp-idf/issues/2886
This commit is contained in:
parent
cfc4f74b52
commit
020b295f06
|
@ -528,6 +528,8 @@ esp_err_t esp_event_loop_run(esp_event_loop_handle_t event_loop, TickType_t tick
|
||||||
exec |= true;
|
exec |= true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
post_instance_delete(&post);
|
||||||
|
|
||||||
if (ticks_to_run != portMAX_DELAY) {
|
if (ticks_to_run != portMAX_DELAY) {
|
||||||
end = xTaskGetTickCount();
|
end = xTaskGetTickCount();
|
||||||
remaining_ticks -= end - marker;
|
remaining_ticks -= end - marker;
|
||||||
|
@ -559,10 +561,14 @@ esp_err_t esp_event_loop_delete(esp_event_loop_handle_t event_loop)
|
||||||
|
|
||||||
esp_event_loop_instance_t* loop = (esp_event_loop_instance_t*) event_loop;
|
esp_event_loop_instance_t* loop = (esp_event_loop_instance_t*) event_loop;
|
||||||
SemaphoreHandle_t loop_mutex = loop->mutex;
|
SemaphoreHandle_t loop_mutex = loop->mutex;
|
||||||
|
#ifdef CONFIG_EVENT_LOOP_PROFILING
|
||||||
|
SemaphoreHandle_t loop_profiling_mutex = loop->profiling_mutex;
|
||||||
|
#endif
|
||||||
|
|
||||||
xSemaphoreTakeRecursive(loop->mutex, portMAX_DELAY);
|
xSemaphoreTakeRecursive(loop->mutex, portMAX_DELAY);
|
||||||
|
|
||||||
#ifdef CONFIG_EVENT_LOOP_PROFILING
|
#ifdef CONFIG_EVENT_LOOP_PROFILING
|
||||||
|
xSemaphoreTakeRecursive(loop->profiling_mutex, portMAX_DELAY);
|
||||||
portENTER_CRITICAL(&s_event_loops_spinlock);
|
portENTER_CRITICAL(&s_event_loops_spinlock);
|
||||||
SLIST_REMOVE(&s_event_loops, loop, esp_event_loop_instance, loop_entry);
|
SLIST_REMOVE(&s_event_loops, loop, esp_event_loop_instance, loop_entry);
|
||||||
portEXIT_CRITICAL(&s_event_loops_spinlock);
|
portEXIT_CRITICAL(&s_event_loops_spinlock);
|
||||||
|
@ -588,6 +594,10 @@ esp_err_t esp_event_loop_delete(esp_event_loop_handle_t event_loop)
|
||||||
free(loop);
|
free(loop);
|
||||||
// Free loop mutex before deleting
|
// Free loop mutex before deleting
|
||||||
xSemaphoreGiveRecursive(loop_mutex);
|
xSemaphoreGiveRecursive(loop_mutex);
|
||||||
|
#ifdef CONFIG_EVENT_LOOP_PROFILING
|
||||||
|
xSemaphoreGiveRecursive(loop_profiling_mutex);
|
||||||
|
vSemaphoreDelete(loop_profiling_mutex);
|
||||||
|
#endif
|
||||||
vSemaphoreDelete(loop_mutex);
|
vSemaphoreDelete(loop_mutex);
|
||||||
|
|
||||||
ESP_LOGD(TAG, "deleted loop %p", (void*) event_loop);
|
ESP_LOGD(TAG, "deleted loop %p", (void*) event_loop);
|
||||||
|
|
Loading…
Reference in a new issue