@@ -601,76 +601,84 @@ static esp_err_t joinMulticastGroup(const ip_addr_t *addr, bool join, tcpip_adap
601
601
return ESP_ERR_INVALID_ARG;
602
602
}
603
603
netif = (struct netif *)nif;
604
+ UDP_MUTEX_LOCK ();
604
605
605
606
#if CONFIG_LWIP_IPV6
606
607
if (addr->type == IPADDR_TYPE_V4) {
607
608
if (join) {
608
609
if (igmp_joingroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
609
- return ESP_ERR_INVALID_STATE ;
610
+ goto igmp_fail ;
610
611
}
611
612
} else {
612
613
if (igmp_leavegroup_netif (netif, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
613
- return ESP_ERR_INVALID_STATE ;
614
+ goto igmp_fail ;
614
615
}
615
616
}
616
617
} else {
617
618
if (join) {
618
619
if (mld6_joingroup_netif (netif, &(addr->u_addr .ip6 ))) {
619
- return ESP_ERR_INVALID_STATE ;
620
+ goto igmp_fail ;
620
621
}
621
622
} else {
622
623
if (mld6_leavegroup_netif (netif, &(addr->u_addr .ip6 ))) {
623
- return ESP_ERR_INVALID_STATE ;
624
+ goto igmp_fail ;
624
625
}
625
626
}
626
627
}
627
628
#else
628
629
if (join) {
629
630
if (igmp_joingroup_netif (netif, (const ip4_addr *)(addr))) {
630
- return ESP_ERR_INVALID_STATE ;
631
+ goto igmp_fail ;
631
632
}
632
633
} else {
633
634
if (igmp_leavegroup_netif (netif, (const ip4_addr *)(addr))) {
634
- return ESP_ERR_INVALID_STATE ;
635
+ goto igmp_fail ;
635
636
}
636
637
}
637
638
#endif
639
+ UDP_MUTEX_UNLOCK ();
638
640
} else {
641
+ UDP_MUTEX_LOCK ();
639
642
#if CONFIG_LWIP_IPV6
640
643
if (addr->type == IPADDR_TYPE_V4) {
641
644
if (join) {
642
645
if (igmp_joingroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
643
- return ESP_ERR_INVALID_STATE ;
646
+ goto igmp_fail ;
644
647
}
645
648
} else {
646
649
if (igmp_leavegroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)&(addr->u_addr .ip4 ))) {
647
- return ESP_ERR_INVALID_STATE ;
650
+ goto igmp_fail ;
648
651
}
649
652
}
650
653
} else {
651
654
if (join) {
652
655
if (mld6_joingroup ((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr .ip6 ))) {
653
- return ESP_ERR_INVALID_STATE ;
656
+ goto igmp_fail ;
654
657
}
655
658
} else {
656
659
if (mld6_leavegroup ((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr .ip6 ))) {
657
- return ESP_ERR_INVALID_STATE ;
660
+ goto igmp_fail ;
658
661
}
659
662
}
660
663
}
661
664
#else
662
665
if (join) {
663
666
if (igmp_joingroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)(addr))) {
664
- return ESP_ERR_INVALID_STATE ;
667
+ goto igmp_fail ;
665
668
}
666
669
} else {
667
670
if (igmp_leavegroup ((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)(addr))) {
668
- return ESP_ERR_INVALID_STATE ;
671
+ goto igmp_fail ;
669
672
}
670
673
}
671
674
#endif
675
+ UDP_MUTEX_UNLOCK ();
672
676
}
673
677
return ESP_OK;
678
+
679
+ igmp_fail:
680
+ UDP_MUTEX_UNLOCK ();
681
+ return ESP_ERR_INVALID_STATE;
674
682
}
675
683
676
684
bool AsyncUDP::listenMulticast (const ip_addr_t *addr, uint16_t port, uint8_t ttl, tcpip_adapter_if_t tcpip_if) {
0 commit comments