Skip to content

Commit ed9a5d8

Browse files
fix(udp): Add missing LwIP locks to init multicast (#10813)
* fix(udp): Add missing LwIP locks to init multicast * ci(pre-commit): Apply automatic fixes --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent 2cb0819 commit ed9a5d8

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

libraries/AsyncUDP/src/AsyncUDP.cpp

+20-12
Original file line numberDiff line numberDiff line change
@@ -601,76 +601,84 @@ static esp_err_t joinMulticastGroup(const ip_addr_t *addr, bool join, tcpip_adap
601601
return ESP_ERR_INVALID_ARG;
602602
}
603603
netif = (struct netif *)nif;
604+
UDP_MUTEX_LOCK();
604605

605606
#if CONFIG_LWIP_IPV6
606607
if (addr->type == IPADDR_TYPE_V4) {
607608
if (join) {
608609
if (igmp_joingroup_netif(netif, (const ip4_addr *)&(addr->u_addr.ip4))) {
609-
return ESP_ERR_INVALID_STATE;
610+
goto igmp_fail;
610611
}
611612
} else {
612613
if (igmp_leavegroup_netif(netif, (const ip4_addr *)&(addr->u_addr.ip4))) {
613-
return ESP_ERR_INVALID_STATE;
614+
goto igmp_fail;
614615
}
615616
}
616617
} else {
617618
if (join) {
618619
if (mld6_joingroup_netif(netif, &(addr->u_addr.ip6))) {
619-
return ESP_ERR_INVALID_STATE;
620+
goto igmp_fail;
620621
}
621622
} else {
622623
if (mld6_leavegroup_netif(netif, &(addr->u_addr.ip6))) {
623-
return ESP_ERR_INVALID_STATE;
624+
goto igmp_fail;
624625
}
625626
}
626627
}
627628
#else
628629
if (join) {
629630
if (igmp_joingroup_netif(netif, (const ip4_addr *)(addr))) {
630-
return ESP_ERR_INVALID_STATE;
631+
goto igmp_fail;
631632
}
632633
} else {
633634
if (igmp_leavegroup_netif(netif, (const ip4_addr *)(addr))) {
634-
return ESP_ERR_INVALID_STATE;
635+
goto igmp_fail;
635636
}
636637
}
637638
#endif
639+
UDP_MUTEX_UNLOCK();
638640
} else {
641+
UDP_MUTEX_LOCK();
639642
#if CONFIG_LWIP_IPV6
640643
if (addr->type == IPADDR_TYPE_V4) {
641644
if (join) {
642645
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;
644647
}
645648
} else {
646649
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;
648651
}
649652
}
650653
} else {
651654
if (join) {
652655
if (mld6_joingroup((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr.ip6))) {
653-
return ESP_ERR_INVALID_STATE;
656+
goto igmp_fail;
654657
}
655658
} else {
656659
if (mld6_leavegroup((const ip6_addr *)IP6_ADDR_ANY, &(addr->u_addr.ip6))) {
657-
return ESP_ERR_INVALID_STATE;
660+
goto igmp_fail;
658661
}
659662
}
660663
}
661664
#else
662665
if (join) {
663666
if (igmp_joingroup((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)(addr))) {
664-
return ESP_ERR_INVALID_STATE;
667+
goto igmp_fail;
665668
}
666669
} else {
667670
if (igmp_leavegroup((const ip4_addr *)IP4_ADDR_ANY, (const ip4_addr *)(addr))) {
668-
return ESP_ERR_INVALID_STATE;
671+
goto igmp_fail;
669672
}
670673
}
671674
#endif
675+
UDP_MUTEX_UNLOCK();
672676
}
673677
return ESP_OK;
678+
679+
igmp_fail:
680+
UDP_MUTEX_UNLOCK();
681+
return ESP_ERR_INVALID_STATE;
674682
}
675683

676684
bool AsyncUDP::listenMulticast(const ip_addr_t *addr, uint16_t port, uint8_t ttl, tcpip_adapter_if_t tcpip_if) {

0 commit comments

Comments
 (0)