mirror of https://gerrit.osmocom.org/libosmocore
select: Find the highest fd when filling the fd_sets
Instead of returning maxfd, which is the highest fd ever seen, take the highest we have seen on this iteration. This makes a tiny difference for the osmo-sip-connector and its event loop integration. select.c ignores the return value of this function right now. This was seen while debugging the eventloop integration of the osmo-sip-connector before and after a VTY connection. The fds being polled didn't go down. Change-Id: I1a6d7271273ec08bb511c21b936891bc508843e4
This commit is contained in:
parent
059c40476c
commit
ff20641d9e
13
src/select.c
13
src/select.c
|
@ -117,10 +117,18 @@ void osmo_fd_unregister(struct osmo_fd *fd)
|
|||
llist_del(&fd->list);
|
||||
}
|
||||
|
||||
/*! \brief Populate the fd_sets and return the highest fd number
|
||||
* \param[in] _rset The readfds to populate
|
||||
* \param[in] _wset The wrtiefds to populate
|
||||
* \param[in] _eset The errorfds to populate
|
||||
*
|
||||
* \returns The highest file descriptor seen or 0 on an empty list
|
||||
*/
|
||||
inline int osmo_fd_fill_fds(void *_rset, void *_wset, void *_eset)
|
||||
{
|
||||
fd_set *readset = _rset, *writeset = _wset, *exceptset = _eset;
|
||||
struct osmo_fd *ufd;
|
||||
int highfd = 0;
|
||||
|
||||
llist_for_each_entry(ufd, &osmo_fds, list) {
|
||||
if (ufd->when & BSC_FD_READ)
|
||||
|
@ -131,9 +139,12 @@ inline int osmo_fd_fill_fds(void *_rset, void *_wset, void *_eset)
|
|||
|
||||
if (ufd->when & BSC_FD_EXCEPT)
|
||||
FD_SET(ufd->fd, exceptset);
|
||||
|
||||
if (ufd->fd > highfd)
|
||||
highfd = ufd->fd;
|
||||
}
|
||||
|
||||
return maxfd;
|
||||
return highfd;
|
||||
}
|
||||
|
||||
inline int osmo_fd_disp_fds(void *_rset, void *_wset, void *_eset)
|
||||
|
|
Loading…
Reference in New Issue