]> granicus.if.org Git - esp-idf/commitdiff
mdns: fix crash after init if no memory for task
authorDavid Cermak <cermak@espressif.com>
Fri, 25 Jan 2019 15:17:07 +0000 (16:17 +0100)
committerDavid Cermak <cermak@espressif.com>
Tue, 5 Feb 2019 06:59:38 +0000 (07:59 +0100)
mdns init first starts timer task, then starts service task. if service task failed to be created, timer task needs to be stopped too.
fixed https://ezredmine.espressif.cn:8765/issues/28466

components/mdns/mdns.c

index c77c9443fa4b1924fa352f0ea5215fd86c626efd..1626ffaeb80e0b13708b5a937ea659b96f8e0f5c 100644 (file)
@@ -3993,7 +3993,10 @@ static esp_err_t _mdns_service_task_start()
     if (!_mdns_service_task_handle) {
         xTaskCreatePinnedToCore(_mdns_service_task, "mdns", MDNS_SERVICE_STACK_DEPTH, NULL, 1, (TaskHandle_t * const)(&_mdns_service_task_handle), 0);
         if (!_mdns_service_task_handle) {
+            _mdns_stop_timer();
             MDNS_SERVICE_UNLOCK();
+            vSemaphoreDelete(_mdns_service_semaphore);
+            _mdns_service_semaphore = NULL;
             return ESP_FAIL;
         }
     }
@@ -4012,6 +4015,8 @@ static esp_err_t _mdns_service_task_stop()
     MDNS_SERVICE_LOCK();
     _mdns_stop_timer();
     MDNS_SERVICE_UNLOCK();
+    vSemaphoreDelete(_mdns_service_semaphore);
+    _mdns_service_semaphore = NULL;
     if (_mdns_service_task_handle) {
         mdns_action_t action;
         mdns_action_t * a = &action;