]> granicus.if.org Git - esp-idf/commitdiff
esp_event: fix memory leaks
authorRenz Christian Bagaporo <renz@espressif.com>
Tue, 29 Jan 2019 02:52:53 +0000 (10:52 +0800)
committerRenz Christian Bagaporo <renz@espressif.com>
Fri, 1 Feb 2019 02:08:50 +0000 (10:08 +0800)
Closes https://github.com/espressif/esp-idf/issues/2886

components/esp_event/esp_event.c

index 8c5c0570ec748a3290a10be046b7f38ba510162e..149f3643037e17e4bbc3e8128311becebe959788 100644 (file)
@@ -528,6 +528,8 @@ esp_err_t esp_event_loop_run(esp_event_loop_handle_t event_loop, TickType_t tick
             exec |= true;
         }
 
+        post_instance_delete(&post);
+
         if (ticks_to_run != portMAX_DELAY) {
             end = xTaskGetTickCount();
             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;
     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);
 
 #ifdef CONFIG_EVENT_LOOP_PROFILING
+    xSemaphoreTakeRecursive(loop->profiling_mutex, portMAX_DELAY);
     portENTER_CRITICAL(&s_event_loops_spinlock);
     SLIST_REMOVE(&s_event_loops, loop, esp_event_loop_instance, loop_entry);
     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 mutex before deleting
     xSemaphoreGiveRecursive(loop_mutex);
+#ifdef CONFIG_EVENT_LOOP_PROFILING
+    xSemaphoreGiveRecursive(loop_profiling_mutex);
+    vSemaphoreDelete(loop_profiling_mutex);
+#endif
     vSemaphoreDelete(loop_mutex);
 
     ESP_LOGD(TAG, "deleted loop %p", (void*) event_loop);