@@ -5148,8 +5148,6 @@ static void _mdns_free_action(mdns_action_t *action)
5148
5148
*/
5149
5149
static void _mdns_execute_action (mdns_action_t * action )
5150
5150
{
5151
- mdns_srv_item_t * a = NULL ;
5152
-
5153
5151
switch (action -> type ) {
5154
5152
case ACTION_SYSTEM_EVENT :
5155
5153
perform_event_action (action -> data .sys_event .interface , action -> data .sys_event .event_action );
@@ -5169,19 +5167,6 @@ static void _mdns_execute_action(mdns_action_t *action)
5169
5167
_mdns_server -> instance = action -> data .instance ;
5170
5168
_mdns_restart_all_pcbs_no_instance ();
5171
5169
5172
- break ;
5173
- case ACTION_SERVICES_CLEAR :
5174
- _mdns_send_final_bye (false);
5175
- a = _mdns_server -> services ;
5176
- _mdns_server -> services = NULL ;
5177
- while (a ) {
5178
- mdns_srv_item_t * s = a ;
5179
- a = a -> next ;
5180
- _mdns_remove_scheduled_service_packets (s -> service );
5181
- _mdns_free_service (s -> service );
5182
- free (s );
5183
- }
5184
-
5185
5170
break ;
5186
5171
case ACTION_SEARCH_ADD :
5187
5172
_mdns_search_add (action -> data .search_add .search );
@@ -5226,6 +5211,7 @@ static void _mdns_execute_action(mdns_action_t *action)
5226
5211
free ((char * )action -> data .delegate_hostname .hostname );
5227
5212
free_address_list (action -> data .delegate_hostname .address_list );
5228
5213
}
5214
+ xSemaphoreGive (_mdns_server -> action_sema );
5229
5215
break ;
5230
5216
case ACTION_DELEGATE_HOSTNAME_SET_ADDR :
5231
5217
if (!_mdns_delegate_hostname_set_address (action -> data .delegate_hostname .hostname ,
@@ -5789,6 +5775,7 @@ esp_err_t mdns_delegate_hostname_add(const char *hostname, const mdns_ip_addr_t
5789
5775
free (action );
5790
5776
return ESP_ERR_NO_MEM ;
5791
5777
}
5778
+ xSemaphoreTake (_mdns_server -> action_sema , portMAX_DELAY );
5792
5779
return ESP_OK ;
5793
5780
}
5794
5781
@@ -6465,27 +6452,27 @@ esp_err_t mdns_service_remove(const char *service_type, const char *proto)
6465
6452
6466
6453
esp_err_t mdns_service_remove_all (void )
6467
6454
{
6468
- if (!_mdns_server ) {
6469
- return ESP_ERR_INVALID_ARG ;
6470
- }
6471
6455
MDNS_SERVICE_LOCK ();
6456
+ esp_err_t ret = ESP_OK ;
6457
+ ESP_GOTO_ON_FALSE (_mdns_server , ESP_ERR_INVALID_ARG , done , TAG , "Invalid state" );
6472
6458
if (!_mdns_server -> services ) {
6473
- MDNS_SERVICE_UNLOCK ();
6474
- return ESP_OK ;
6459
+ goto done ;
6475
6460
}
6476
- MDNS_SERVICE_UNLOCK ();
6477
6461
6478
- mdns_action_t * action = ( mdns_action_t * ) malloc ( sizeof ( mdns_action_t ) );
6479
- if (! action ) {
6480
- HOOK_MALLOC_FAILED ;
6481
- return ESP_ERR_NO_MEM ;
6482
- }
6483
- action -> type = ACTION_SERVICES_CLEAR ;
6484
- if ( xQueueSend ( _mdns_server -> action_queue , & action , ( TickType_t ) 0 ) != pdPASS ) {
6485
- free ( action );
6486
- return ESP_ERR_NO_MEM ;
6462
+ _mdns_send_final_bye (false );
6463
+ mdns_srv_item_t * services = _mdns_server -> services ;
6464
+ _mdns_server -> services = NULL ;
6465
+ while ( services ) {
6466
+ mdns_srv_item_t * s = services ;
6467
+ services = services -> next ;
6468
+ _mdns_remove_scheduled_service_packets ( s -> service );
6469
+ _mdns_free_service ( s -> service );
6470
+ free ( s ) ;
6487
6471
}
6488
- return ESP_OK ;
6472
+
6473
+ done :
6474
+ MDNS_SERVICE_UNLOCK ();
6475
+ return ret ;
6489
6476
}
6490
6477
6491
6478
/*
0 commit comments