mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-19 05:10:40 +00:00
Fix select_waiting not being decremented for sockets closed while in lwip_select()
See bug #57445. Short version of the description there: lwip_select() failed to decrement 'select_waiting' of a socket since that code part failed on 'free_pending' sockets. However, the code does not have to check that as it has marked the socket to be in use itself earlier. Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
This commit is contained in:
parent
87d44bbfcd
commit
8c43d83689
@ -2101,7 +2101,8 @@ lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
|
|||||||
(exceptset && FD_ISSET(i, exceptset))) {
|
(exceptset && FD_ISSET(i, exceptset))) {
|
||||||
struct lwip_sock *sock;
|
struct lwip_sock *sock;
|
||||||
SYS_ARCH_PROTECT(lev);
|
SYS_ARCH_PROTECT(lev);
|
||||||
sock = tryget_socket_unconn_locked(i);
|
sock = tryget_socket_unconn_nouse(i);
|
||||||
|
LWIP_ASSERT("socket gone at the end of select", sock != NULL);
|
||||||
if (sock != NULL) {
|
if (sock != NULL) {
|
||||||
/* for now, handle select_waiting==0... */
|
/* for now, handle select_waiting==0... */
|
||||||
LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0);
|
LWIP_ASSERT("sock->select_waiting > 0", sock->select_waiting > 0);
|
||||||
@ -2109,7 +2110,6 @@ lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
|
|||||||
sock->select_waiting--;
|
sock->select_waiting--;
|
||||||
}
|
}
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
done_socket(sock);
|
|
||||||
} else {
|
} else {
|
||||||
SYS_ARCH_UNPROTECT(lev);
|
SYS_ARCH_UNPROTECT(lev);
|
||||||
/* Not a valid socket */
|
/* Not a valid socket */
|
||||||
|
Loading…
Reference in New Issue
Block a user