pespin has submitted this change. (
https://gerrit.osmocom.org/c/libosmocore/+/40369?usp=email )
Change subject: osmo_io: Keep msgb ownership internal during segmentation until read_cb
......................................................................
osmo_io: Keep msgb ownership internal during segmentation until read_cb
Until dispatched to the user over read_cb(), the msgb is considered to
be not-ready-for-user and hence it's kept owned by the iofd.
This resembles more the actual expected parentship tree, since
iofd->pending is freed by osmo_io internally in osmo_iofd_close().
More importat, which should cause less trouble if for instance user of
osmo_iofd wishes to reparent the osmo_io and then free the previous ctx
it passed during osmo_iofd_setup().
Change-Id: I4f41153948b7f1568c7499db53b9620bf2dd9ac4
---
M src/core/osmo_io.c
1 file changed, 4 insertions(+), 1 deletion(-)
Approvals:
Jenkins Builder: Verified
jolly: Looks good to me, but someone else must approve
osmith: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
diff --git a/src/core/osmo_io.c b/src/core/osmo_io.c
index 9d377a8..aaf7bcc 100644
--- a/src/core/osmo_io.c
+++ b/src/core/osmo_io.c
@@ -343,6 +343,7 @@
OSMO_ASSERT(iofd->mode == OSMO_IO_FD_MODE_READ_WRITE);
if (rc <= 0) {
+ talloc_steal(iofd->msgb_alloc.ctx, msg);
iofd->io_ops.read_cb(iofd, rc, msg);
return;
}
@@ -354,6 +355,7 @@
/* It it expected as per API spec that we return the
* return value of read here. The amount of bytes in msg is
* available to the user in msg itself. */
+ talloc_steal(iofd->msgb_alloc.ctx, msg);
iofd->io_ops.read_cb(iofd, rc, msg);
/* The user could unregister/close the iofd during read_cb() above.
* Once that's done, it doesn't expect to receive any more events,
@@ -378,15 +380,16 @@
* \param[in] hdr serialized msghdr containing state of completed I/O */
void iofd_handle_recv(struct osmo_io_fd *iofd, struct msgb *msg, int rc, struct
iofd_msghdr *hdr)
{
- talloc_steal(iofd->msgb_alloc.ctx, msg);
switch (iofd->mode) {
case OSMO_IO_FD_MODE_READ_WRITE:
iofd_handle_segmented_read(iofd, msg, rc);
break;
case OSMO_IO_FD_MODE_RECVFROM_SENDTO:
+ talloc_steal(iofd->msgb_alloc.ctx, msg);
iofd->io_ops.recvfrom_cb(iofd, rc, msg, &hdr->osa);
break;
case OSMO_IO_FD_MODE_RECVMSG_SENDMSG:
+ talloc_steal(iofd->msgb_alloc.ctx, msg);
iofd->io_ops.recvmsg_cb(iofd, rc, msg, &hdr->hdr);
break;
default:
--
To view, visit
https://gerrit.osmocom.org/c/libosmocore/+/40369?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I4f41153948b7f1568c7499db53b9620bf2dd9ac4
Gerrit-Change-Number: 40369
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann(a)sysmocom.de>
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>