diff --git a/common_components/linux_compat/freertos/freertos_linux.c b/common_components/linux_compat/freertos/freertos_linux.c index ced905228..ce58d0eb6 100644 --- a/common_components/linux_compat/freertos/freertos_linux.c +++ b/common_components/linux_compat/freertos/freertos_linux.c @@ -166,6 +166,8 @@ void vTaskDelete(TaskHandle_t *task) if (task == NULL) { pthread_exit(0); + } else { + pthread_cancel((pthread_t)task); } void *thread_rval = NULL; pthread_join((pthread_t)task, &thread_rval); diff --git a/components/mdns/.cz.yaml b/components/mdns/.cz.yaml index 36344c402..986de8a08 100644 --- a/components/mdns/.cz.yaml +++ b/components/mdns/.cz.yaml @@ -3,6 +3,6 @@ commitizen: bump_message: 'bump(mdns): $current_version -> $new_version' pre_bump_hooks: python ../../ci/changelog.py mdns tag_format: mdns-v$version - version: 1.8.0 + version: 1.8.1 version_files: - idf_component.yml diff --git a/components/mdns/CHANGELOG.md b/components/mdns/CHANGELOG.md index 02a042845..4c3f5d390 100644 --- a/components/mdns/CHANGELOG.md +++ b/components/mdns/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [1.8.1](https://github.com/espressif/esp-protocols/commits/mdns-v1.8.1) + +### Bug Fixes + +- Fix potential task delete race ([8ca45f34](https://github.com/espressif/esp-protocols/commit/8ca45f34)) + ## [1.8.0](https://github.com/espressif/esp-protocols/commits/mdns-v1.8.0) ### Features diff --git a/components/mdns/idf_component.yml b/components/mdns/idf_component.yml index f5f3ae9d2..595f91c3b 100644 --- a/components/mdns/idf_component.yml +++ b/components/mdns/idf_component.yml @@ -1,4 +1,4 @@ -version: "1.8.0" +version: "1.8.1" description: "Multicast UDP service used to provide local network service and host discovery." url: "https://github.com/espressif/esp-protocols/tree/master/components/mdns" issues: "https://github.com/espressif/esp-protocols/issues" diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 5a4d5191a..388fc9599 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -5427,7 +5427,7 @@ static void _mdns_service_task(void *pvParameters) } } _mdns_service_task_handle = NULL; - vTaskDelete(NULL); + vTaskDelay(portMAX_DELAY); } static void _mdns_timer_cb(void *arg) @@ -5532,16 +5532,17 @@ static esp_err_t _mdns_service_task_stop(void) { _mdns_stop_timer(); if (_mdns_service_task_handle) { + TaskHandle_t task_handle = _mdns_service_task_handle; mdns_action_t action; mdns_action_t *a = &action; action.type = ACTION_TASK_STOP; if (xQueueSend(_mdns_server->action_queue, &a, (TickType_t)0) != pdPASS) { - vTaskDelete(_mdns_service_task_handle); _mdns_service_task_handle = NULL; } while (_mdns_service_task_handle) { vTaskDelay(10 / portTICK_PERIOD_MS); } + vTaskDelete(task_handle); } vSemaphoreDelete(_mdns_service_semaphore); _mdns_service_semaphore = NULL;