]> granicus.if.org Git - esp-idf/commitdiff
mdns: fix possible deadlock on mdns deinit calling mdns_free()
authorDavid Cermak <cermak@espressif.com>
Mon, 4 Mar 2019 10:13:52 +0000 (11:13 +0100)
committerDavid Cermak <cermak@espressif.com>
Wed, 13 Mar 2019 15:32:59 +0000 (16:32 +0100)
mnds_free() initiates stop and delete timer tasks, which after locking the mutex could lead to a dead lock in case timer task executed before deleting the task, as it would wait indefinitelly for unlocking the mutex. This condition is fixed by calling _mdns_stop_timer without locking the mutex, because there's no need to protect any data when stopping and deleting the timer task

components/mdns/mdns.c

index 7414dd3f16ab58ba09af20f61a7fdb6916733813..268f7c2800d3d81afb281c28fa42bbfaaf5cc171 100644 (file)
@@ -4017,9 +4017,7 @@ static esp_err_t _mdns_service_task_start()
  */
 static esp_err_t _mdns_service_task_stop()
 {
-    MDNS_SERVICE_LOCK();
     _mdns_stop_timer();
-    MDNS_SERVICE_UNLOCK();
     if (_mdns_service_task_handle) {
         mdns_action_t action;
         mdns_action_t * a = &action;