diff options
| author | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2017-03-07 14:28:38 +0100 | 
|---|---|---|
| committer | Holger Freyther <holger@freyther.de> | 2017-04-04 20:14:32 +0000 | 
| commit | ff20641d9e3bb4373f9577c3382df1480ace4e91 (patch) | |
| tree | c9a4d89f6430c17ff6600d83d39ea607a8832fd0 | |
| parent | 059c40476ca7c425736825d2a479d1a4b64ce603 (diff) | |
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
| -rw-r--r-- | src/select.c | 13 | 
1 files changed, 12 insertions, 1 deletions
| 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) | 
