From ff20641d9e3bb4373f9577c3382df1480ace4e91 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 7 Mar 2017 14:28:38 +0100 Subject: 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 --- src/select.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/select.c b/src/select.c index ab0734ea..8ed7f1bd 100644 --- a/src/select.c +++ b/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) -- cgit v1.2.3