[MERGED] libosmocore[master]: select: Find the highest fd when filling the fd_sets

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Holger Freyther gerrit-no-reply at lists.osmocom.org
Tue Apr 4 20:14:33 UTC 2017


Holger Freyther has submitted this change and it was merged.

Change subject: select: Find the highest fd when filling the fd_sets
......................................................................


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
---
M src/select.c
1 file changed, 12 insertions(+), 1 deletion(-)

Approvals:
  Max: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  Holger Freyther: Looks good to me, approved



diff --git a/src/select.c b/src/select.c
index ab0734e..8ed7f1b 100644
--- a/src/select.c
+++ b/src/select.c
@@ -117,10 +117,18 @@
 	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 @@
 
 		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)

-- 
To view, visit https://gerrit.osmocom.org/1986
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I1a6d7271273ec08bb511c21b936891bc508843e4
Gerrit-PatchSet: 4
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Owner: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Holger Freyther <holger at freyther.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>



More information about the gerrit-log mailing list