asio and kqueue (2nd trye) (was: RE: (boost::)asio and kqueue problem)
Scott Mitchell
scott.k.mitch1 at gmail.com
Fri Oct 14 16:24:00 UTC 2016
Patch generally lgtm ... just 1 nit comment:
+ } else {
+ if (sbavail(&so->so_rcv) >= so->so_rcv.sb_lowat)
+ return 1;
+ }
Collapse the else and the block inside to just make it an `else if`
for less branching.
On Fri, Oct 14, 2016 at 5:03 AM, Konstantin Belousov <kostikbel at gmail.com>
wrote:
> On Fri, Oct 14, 2016 at 09:21:52AM +0000, Hartmut.Brandt at dlr.de wrote:
> > Hi all,
> >
> > here is the 2nd try taking into account the comments I received. Since
> I'm not familiar with the locking in the sockets area I ask somebody with
> that knowledge to check it before I commit it.
>
> I have only style notes, the factual code changes in the patch look good
> to me.
>
> Index: uipc_socket.c
> ===================================================================
> --- uipc_socket.c (revision 307091)
> +++ uipc_socket.c (working copy)
> @@ -159,15 +159,9 @@
> static int filt_soread(struct knote *kn, long hint);
> static void filt_sowdetach(struct knote *kn);
> static int filt_sowrite(struct knote *kn, long hint);
> -static int filt_solisten(struct knote *kn, long hint);
> static int inline hhook_run_socket(struct socket *so, void *hctx, int32_t
> h_id);
> fo_kqfilter_t soo_kqfilter;
>
> -static struct filterops solisten_filtops = {
> - .f_isfd = 1,
> - .f_detach = filt_sordetach,
> - .f_event = filt_solisten,
> -};
> static struct filterops soread_filtops = {
> .f_isfd = 1,
> .f_detach = filt_sordetach,
> @@ -3075,10 +3069,7 @@
>
> switch (kn->kn_filter) {
> case EVFILT_READ:
> - if (so->so_options & SO_ACCEPTCONN)
> - kn->kn_fop = &solisten_filtops;
> - else
> - kn->kn_fop = &soread_filtops;
> + kn->kn_fop = &soread_filtops;
> sb = &so->so_rcv;
> break;
> case EVFILT_WRITE:
> @@ -3282,29 +3273,34 @@
> static int
> filt_soread(struct knote *kn, long hint)
> {
> - struct socket *so;
> + struct socket *so = kn->kn_fp->f_data;
> Style is against mixing declaration and initialization. Please keep the
> next removed line instead.
>
> - so = kn->kn_fp->f_data;
> This one.
>
> - SOCKBUF_LOCK_ASSERT(&so->so_rcv);
> + if (so->so_options & SO_ACCEPTCONN) {
> + kn->kn_data = so->so_qlen;
> + return (!TAILQ_EMPTY(&so->so_comp));
>
> - kn->kn_data = sbavail(&so->so_rcv) - so->so_rcv.sb_ctl;
> - if (so->so_rcv.sb_state & SBS_CANTRCVMORE) {
> - kn->kn_flags |= EV_EOF;
> - kn->kn_fflags = so->so_error;
> - return (1);
> - } else if (so->so_error) /* temporary udp error */
> - return (1);
> + } else {
> You do not need else {} block, 'then' branch ends with return(). If you
> remove else, you do not need additional indent for the old filt_soread()
> function' body.
>
> + SOCKBUF_LOCK_ASSERT(&so->so_rcv);
>
> - if (kn->kn_sfflags & NOTE_LOWAT) {
> - if (kn->kn_data >= kn->kn_sdata)
> - return 1;
> - } else {
> - if (sbavail(&so->so_rcv) >= so->so_rcv.sb_lowat)
> - return 1;
> + kn->kn_data = sbavail(&so->so_rcv) - so->so_rcv.sb_ctl;
> + if (so->so_rcv.sb_state & SBS_CANTRCVMORE) {
> + kn->kn_flags |= EV_EOF;
> + kn->kn_fflags = so->so_error;
> + return (1);
> + } else if (so->so_error) /* temporary udp error */
> + return (1);
> +
> + if (kn->kn_sfflags & NOTE_LOWAT) {
> + if (kn->kn_data >= kn->kn_sdata)
> + return 1;
> return (1);
> since you change the line anyway.
>
> + } else {
> + if (sbavail(&so->so_rcv) >= so->so_rcv.sb_lowat)
> + return 1;
> Same.
>
> + }
> +
> + /* This hook returning non-zero indicates an event, not
> error */
> + return (hhook_run_socket(so, NULL, HHOOK_FILT_SOREAD));
> }
> -
> - /* This hook returning non-zero indicates an event, not error */
> - return (hhook_run_socket(so, NULL, HHOOK_FILT_SOREAD));
> }
>
> static void
> @@ -3346,16 +3342,6 @@
> return (kn->kn_data >= so->so_snd.sb_lowat);
> }
>
> -/*ARGSUSED*/
> -static int
> -filt_solisten(struct knote *kn, long hint)
> -{
> - struct socket *so = kn->kn_fp->f_data;
> -
> - kn->kn_data = so->so_qlen;
> - return (!TAILQ_EMPTY(&so->so_comp));
> -}
> -
> int
> socheckuid(struct socket *so, uid_t uid)
> {
>
More information about the freebsd-current
mailing list