mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-18 20:10:53 +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))) {
|
||||
struct lwip_sock *sock;
|
||||
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) {
|
||||
/* for now, handle 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--;
|
||||
}
|
||||
SYS_ARCH_UNPROTECT(lev);
|
||||
done_socket(sock);
|
||||
} else {
|
||||
SYS_ARCH_UNPROTECT(lev);
|
||||
/* Not a valid socket */
|
||||
|
Loading…
Reference in New Issue
Block a user