daniel has submitted this change. ( https://gerrit.osmocom.org/c/libosmocore/+/33497 )
Change subject: osmo_io: Add osmo_iofd_notify_connected() ...................................................................... osmo_io: Add osmo_iofd_notify_connected() Don't call write_enable() in osmo_iofd_register(). This was used to detect whether a socket is connected or not, but would always be enabled, even on unconnected sockets. Instead make this behaviour explicit by calling osmo_iofd_notify_connected(). Change-Id: Ieed10bc94c8aad821c0a8f7764db0e05c054c1e3 --- M include/osmocom/core/osmo_io.h M src/core/libosmocore.map M src/core/osmo_io.c M tests/osmo_io/osmo_io_test.c M tests/osmo_io/osmo_io_test.ok 5 files changed, 32 insertions(+), 5 deletions(-) Approvals: Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve fixeria: Looks good to me, but someone else must approve laforge: Looks good to me, approved diff --git a/include/osmocom/core/osmo_io.h b/include/osmocom/core/osmo_io.h index aac25a3..932b909 100644 --- a/include/osmocom/core/osmo_io.h +++ b/include/osmocom/core/osmo_io.h @@ -75,6 +75,8 @@ int osmo_iofd_close(struct osmo_io_fd *iofd); void osmo_iofd_free(struct osmo_io_fd *iofd); +void osmo_iofd_notify_connected(struct osmo_io_fd *iofd); + int osmo_iofd_write_msgb(struct osmo_io_fd *iofd, struct msgb *msg); int osmo_iofd_sendto_msgb(struct osmo_io_fd *iofd, struct msgb *msg, int sendto_flags, const struct osmo_sockaddr *dest); diff --git a/src/core/libosmocore.map b/src/core/libosmocore.map index d31392b..50be67c 100644 --- a/src/core/libosmocore.map +++ b/src/core/libosmocore.map @@ -273,6 +273,7 @@ osmo_iofd_txqueue_len; osmo_iofd_unregister; osmo_iofd_uring_init; +osmo_iofd_notify_connected; osmo_iofd_write_msgb; osmo_ip_str_type; osmo_isdnhdlc_decode; diff --git a/src/core/osmo_io.c b/src/core/osmo_io.c index 4cef142..fdb9e32 100644 --- a/src/core/osmo_io.c +++ b/src/core/osmo_io.c @@ -433,7 +433,9 @@ IOFD_FLAG_UNSET(iofd, IOFD_FLAG_CLOSED); osmo_iofd_ops.read_enable(iofd); - osmo_iofd_ops.write_enable(iofd); + + if (iofd->tx_queue.current_length > 0) + osmo_iofd_ops.write_enable(iofd); return rc; } @@ -603,4 +605,14 @@ iofd->io_ops = *ioops; } +/*! Notify the user if/when the socket is connected + * When the socket is connected the write_cb will be called. + * \param[in] iofd the file descriptor */ +void osmo_iofd_notify_connected(struct osmo_io_fd *iofd) +{ + OSMO_ASSERT(iofd->mode == OSMO_IO_FD_MODE_READ_WRITE); + osmo_iofd_ops.write_enable(iofd); +} + + #endif /* defined(__linux__) */ diff --git a/tests/osmo_io/osmo_io_test.c b/tests/osmo_io/osmo_io_test.c index a42e6d0..cff594b 100644 --- a/tests/osmo_io/osmo_io_test.c +++ b/tests/osmo_io/osmo_io_test.c @@ -86,6 +86,8 @@ osmo_iofd_register(iofd1, fds[0]); iofd2 = osmo_iofd_setup(ctx, fds[1], "ep2", OSMO_IO_FD_MODE_READ_WRITE, &ioops_conn_read_write, NULL); osmo_iofd_register(iofd2, fds[1]); + // Explicitly check if ep1 is connected through write_cb + osmo_iofd_notify_connected(iofd1); /* Allow enough cycles to handle the messages */ for (int i = 0; i < 128; i++) diff --git a/tests/osmo_io/osmo_io_test.ok b/tests/osmo_io/osmo_io_test.ok index 82a6f38..6527c19 100644 --- a/tests/osmo_io/osmo_io_test.ok +++ b/tests/osmo_io/osmo_io_test.ok @@ -1,10 +1,6 @@ Running test_connected ep1: write() returned rc=0 -ep2: write() returned rc=0 ep1: write() returned rc=16 -ep2: write() returned rc=16 -ep1: read() msg with len=16 -01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 ep2: read() msg with len=16 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 Running test_unconnected -- To view, visit https://gerrit.osmocom.org/c/libosmocore/+/33497 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: Ieed10bc94c8aad821c0a8f7764db0e05c054c1e3 Gerrit-Change-Number: 33497 Gerrit-PatchSet: 4 Gerrit-Owner: daniel <dwillm...@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: daniel <dwillm...@sysmocom.de> Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de> Gerrit-Reviewer: laforge <lafo...@osmocom.org> Gerrit-Reviewer: pespin <pes...@sysmocom.de> Gerrit-MessageType: merged