Skip to content

Commit 73f2800

Browse files
committed
components/mdns: use semaphore instead of task notification bits (IDFGH-9380)
Component should not alter the task notification bits of the calling task.
1 parent e00e056 commit 73f2800

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

components/mdns/mdns.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4783,7 +4783,7 @@ static void _mdns_execute_action(mdns_action_t *action)
47834783
_mdns_server->hostname = action->data.hostname_set.hostname;
47844784
_mdns_self_host.hostname = action->data.hostname_set.hostname;
47854785
_mdns_restart_all_pcbs();
4786-
xTaskNotifyGive(action->data.hostname_set.calling_task);
4786+
xSemaphoreGive(_mdns_server->action_sema);
47874787
break;
47884788
case ACTION_INSTANCE_SET:
47894789
_mdns_send_bye_all_pcbs_no_instance(false);
@@ -5326,6 +5326,12 @@ esp_err_t mdns_init(void)
53265326
goto free_lock;
53275327
}
53285328

5329+
_mdns_server->action_sema = xSemaphoreCreateBinary();
5330+
if (!_mdns_server->action_sema) {
5331+
err = ESP_ERR_NO_MEM;
5332+
goto free_queue;
5333+
}
5334+
53295335
#if CONFIG_MDNS_PREDEF_NETIF_STA || CONFIG_MDNS_PREDEF_NETIF_AP
53305336
if ((err = esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, mdns_preset_if_handle_system_event, NULL)) != ESP_OK) {
53315337
goto free_event_handlers;
@@ -5381,6 +5387,8 @@ esp_err_t mdns_init(void)
53815387
free_event_handlers:
53825388
unregister_predefined_handlers();
53835389
#endif
5390+
vSemaphoreDelete(_mdns_server->action_sema);
5391+
free_queue:
53845392
vQueueDelete(_mdns_server->action_queue);
53855393
free_lock:
53865394
vSemaphoreDelete(_mdns_server->lock);
@@ -5430,6 +5438,7 @@ void mdns_free(void)
54305438
}
54315439
free(h);
54325440
}
5441+
vSemaphoreDelete(_mdns_server->action_sema);
54335442
vSemaphoreDelete(_mdns_server->lock);
54345443
free(_mdns_server);
54355444
_mdns_server = NULL;
@@ -5456,13 +5465,12 @@ esp_err_t mdns_hostname_set(const char *hostname)
54565465
}
54575466
action->type = ACTION_HOSTNAME_SET;
54585467
action->data.hostname_set.hostname = new_hostname;
5459-
action->data.hostname_set.calling_task = xTaskGetCurrentTaskHandle();
54605468
if (xQueueSend(_mdns_server->action_queue, &action, (TickType_t)0) != pdPASS) {
54615469
free(new_hostname);
54625470
free(action);
54635471
return ESP_ERR_NO_MEM;
54645472
}
5465-
xTaskNotifyWait(0, 0x01, NULL, portMAX_DELAY);
5473+
xSemaphoreTake(_mdns_server->action_sema, portMAX_DELAY);
54665474
return ESP_OK;
54675475
}
54685476

components/mdns/private_include/mdns_private.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,7 @@ typedef struct mdns_server_s {
380380
mdns_srv_item_t *services;
381381
SemaphoreHandle_t lock;
382382
QueueHandle_t action_queue;
383+
SemaphoreHandle_t action_sema;
383384
mdns_tx_packet_t *tx_queue_head;
384385
mdns_search_once_t *search_once;
385386
esp_timer_handle_t timer_handle;
@@ -390,7 +391,6 @@ typedef struct {
390391
union {
391392
struct {
392393
char *hostname;
393-
TaskHandle_t calling_task;
394394
} hostname_set;
395395
char *instance;
396396
struct {

0 commit comments

Comments
 (0)