Attention is currently required from: osmith, Hoernchen, neels, laforge, 
pespin, fixeria.
daniel has posted comments on this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/30934 )

Change subject: Add osmo_io with initial poll backend
......................................................................


Patch Set 3:

(33 comments)

This change is ready for review.

File include/osmocom/core/osmo_io.h:

https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/a0e3d24c_0c13d2a8
PS3, Line 49: void osmo_iofd_read_enable(struct osmo_io_fd *iofd);
> duplicated declaration? one probably should be "disable"
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/77b6da4e_53027caf
PS3, Line 55: unsigned int osmo_iofd_get_priv(struct osmo_io_fd *iofd);
> const iofd
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/2e098e12_c9327515
PS3, Line 56: int osmo_iofd_get_fd(struct osmo_io_fd *iofd);
> const iofd
Done


File src/osmo_io.c:

https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/d1fe65a8_5f61b0c1
PS3, Line 44: extern struct iofd_backend_ops iofd_poll_ops;
> we have an internal header, maybe move this there?
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/9faaa528_cda404be
PS3, Line 47: static enum osmo_io_backend g_backend;
> g_io_backend?
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/38b482c4_bdaa1ff1
PS3, Line 85:  *  \returns the newly allocated msghdr or NULL in case of error 
*/
> I suggest printing an error message and exit(1) here, since this may be the 
> result of an unexpected  […]
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/d5b4285c_c62e8f3a
PS3, Line 121:                               iofd->msgb_alloc.size + headroom, 
headroom, iofd->name);
> the ownserhip of msghdr->msg is not really clear here. […]
For io_uring the msghdr will also be used for read requests and then the msg 
might continue to live in the read_cb after the msghdr has already been freed.


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/93a037c3_1ed3de9e
PS3, Line 181:
> always
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/7f3b57f6_8f6e35ca
PS3, Line 203: e
> Ack
It can be static


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/880fcbfd_46071b9b
PS3, Line 224: superfluous
> superflous IMHO means that it's not needed. […]
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/9c49029c_dd87789b
PS3, Line 225:  msg_pending = iofd_msgb_alloc(iofd);
> I wonder why do we need to allocate + copy to a new msgb here.
This path is chosen if we receive more than one message. The original msgb is 
passed on to the recv callback (where it will be freed) and the pending data is 
stored in a new msgb.


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/0e19c65a_be3c04f1
PS3, Line 230:  /* Trim the original msgb to size */
> iofd->pending may already be set here? in that case may leak the previous 
> iofd->pending?
pending should always be NULL here because either iofd_msgb_pending() of 
iofd_msgb_pending_or_alloc() has been called before.

I'll see if I can restructure the code to make it clearer, like passing msgbs 
in and out here and setting iofd->pending in the functions that call this one.


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/56f23a5c_0255cef3
PS3, Line 271: {
> coding style
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/05bd9ad5_b68c6af8
PS3, Line 273:
> coding style
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/2cc0a478_cf885f44
PS3, Line 306: {
> coding style
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/fcfdae14_dfe16f0e
PS3, Line 308:
> coding style
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/36a34157_d300dbb4
PS3, Line 360: t osmo_io_fd);
> given that there's only one known legacy user of the priv_nr (libosmo-abis), 
> maybe we remove this fr […]
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/db9e9630_ce96f7e9
PS3, Line 360: smo_io_fd);
             :  if (!iofd
> we have three integer argiuments after each other, and lots of arguments, 
> which makes it easy to hav […]
I guess we could even have defaults for msgb size/headroom and have 
osmo_iofd_set_alloc_info() available to set it manually?


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/87d6056c_515bbebe
PS3, Line 391:
> Ack
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/b19c7579_2ddc1353
PS3, Line 408:  i
> c++ style comment
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/804141de_c1216e69
PS3, Line 410:
> no need for this if, must probably (free function)
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/d83e1f13_af9084b0
PS3, Line 416:
> you still want to free the memory if close somehow fails, otherwise you'll 
> leak it?
The close callback return value indicates whether the free() should be deferred 
or not, it does not indicate failure. E.g. if a user calls osmo_iofd_close() in 
the write callback the close callback will only set a flag and the iofd will be 
freed at the end.

Thinking about this osmo_iofd_close() should probably return the value from 
close()


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/04f96390_aceebb06
PS3, Line 432: >priv_nr;
> Ack
I also added set_data() in case some user needs to set it late or change it


File src/osmo_io_internal.h:

https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/901202a5_2ac70407
PS3, Line 87:   // TODO: SCTP_*
> I'd say this needs to be added before merging the patch? or not needed?
I wanted to keep this patch as-is and add sctp support in a separate one. It's 
not finished yet, though.


File src/osmo_io_poll.c:

https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/5ce127e1_7ba3d955
PS3, Line 40: what
> might be just me, but I find "flags" much more descriptive than "what"
In socket.c it's called what in the callback, when in the ofd and flags in the 
internal code.
I'd keep the name to match what osmo_fd users expect.


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/b05225cb_040acd25
PS3, Line 63:   if (iofd->closing) {
> Remove {}
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/a76fd78f_913470bb
PS3, Line 75:                           return;
> this should be send() in order to pass iofd->flags to it. […]
There is no iofd->flags, did you mean msghdr->flags?

I fact I could simply use sendmsg for everything and have wrappers around that. 
(write vs sendto) That might reduce duplication and we're already using struct 
msghdr anyway


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/c7d52183_5cbefaec
PS3, Line 76:                   }
> if write returns error (rc<0), you'll be doing pretty weird stuff here.
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/391780e1_f7888181
PS3, Line 108:          if (rc > 0)
> This is wrong afaict. It should be struct sockaddr_strorage. […]
I'd use sizeof(saddr) since that most accurately describes the size recvfrom is 
allowed to write to.


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/22b09dc2_e73db721
PS3, Line 114:
> extraneous empty line
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/7609bae7_46d28400
PS3, Line 117: {
> coding style
Done


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/06ac3651_6dd70aa7
PS3, Line 124:                  struct osmo_sockaddr *dest = &msghdr->sa;
> Usually we use "osa" to name an osmo_sockaddr, to differentiate it from "sa" 
> (sockaddr). […]
Ack


https://gerrit.osmocom.org/c/libosmocore/+/30934/comment/1054c3ea_055e6adb
PS3, Line 146: i
> should be static? same as all of the iofd_poll_ functions which are exposed 
> as callback via iofd_pol […]
Done



--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/30934
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I50d73cf550d6ce8154bf827bf47408131cf5b0a0
Gerrit-Change-Number: 30934
Gerrit-PatchSet: 3
Gerrit-Owner: daniel <dwillm...@sysmocom.de>
Gerrit-Reviewer: Hoernchen <ew...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: neels <nhofm...@sysmocom.de>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>
Gerrit-CC: laforge <lafo...@osmocom.org>
Gerrit-Attention: osmith <osm...@sysmocom.de>
Gerrit-Attention: Hoernchen <ew...@sysmocom.de>
Gerrit-Attention: neels <nhofm...@sysmocom.de>
Gerrit-Attention: laforge <lafo...@osmocom.org>
Gerrit-Attention: pespin <pes...@sysmocom.de>
Gerrit-Attention: fixeria <vyanits...@sysmocom.de>
Gerrit-Comment-Date: Fri, 20 Jan 2023 13:52:32 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: osmith <osm...@sysmocom.de>
Comment-In-Reply-To: laforge <lafo...@osmocom.org>
Comment-In-Reply-To: pespin <pes...@sysmocom.de>
Gerrit-MessageType: comment

Reply via email to