Skip to content

Commit 8ca45f3

Browse files
committed
fix(mdns): Fix potential task delete race
Need to wait for the task to be deleted before destroy its stack
1 parent 2e28774 commit 8ca45f3

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

common_components/linux_compat/freertos/freertos_linux.c

+2
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ void vTaskDelete(TaskHandle_t *task)
166166

167167
if (task == NULL) {
168168
pthread_exit(0);
169+
} else {
170+
pthread_cancel((pthread_t)task);
169171
}
170172
void *thread_rval = NULL;
171173
pthread_join((pthread_t)task, &thread_rval);

components/mdns/mdns.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -5427,7 +5427,7 @@ static void _mdns_service_task(void *pvParameters)
54275427
}
54285428
}
54295429
_mdns_service_task_handle = NULL;
5430-
vTaskDelete(NULL);
5430+
vTaskDelay(portMAX_DELAY);
54315431
}
54325432

54335433
static void _mdns_timer_cb(void *arg)
@@ -5532,16 +5532,17 @@ static esp_err_t _mdns_service_task_stop(void)
55325532
{
55335533
_mdns_stop_timer();
55345534
if (_mdns_service_task_handle) {
5535+
TaskHandle_t task_handle = _mdns_service_task_handle;
55355536
mdns_action_t action;
55365537
mdns_action_t *a = &action;
55375538
action.type = ACTION_TASK_STOP;
55385539
if (xQueueSend(_mdns_server->action_queue, &a, (TickType_t)0) != pdPASS) {
5539-
vTaskDelete(_mdns_service_task_handle);
55405540
_mdns_service_task_handle = NULL;
55415541
}
55425542
while (_mdns_service_task_handle) {
55435543
vTaskDelay(10 / portTICK_PERIOD_MS);
55445544
}
5545+
vTaskDelete(task_handle);
55455546
}
55465547
vSemaphoreDelete(_mdns_service_semaphore);
55475548
_mdns_service_semaphore = NULL;

0 commit comments

Comments
 (0)