Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Jul 2014 19:08:07 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Baptiste Daroussin <bapt@FreeBSD.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r268493 - head/lib/libfetch
Message-ID:  <20140710160807.GR93733@kib.kiev.ua>
In-Reply-To: <20140710135253.GA93051@ivaldir.etoilebsd.net>
References:  <201407101304.s6AD4rne079137@svn.freebsd.org> <20140710132813.GQ93733@kib.kiev.ua> <20140710135253.GA93051@ivaldir.etoilebsd.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--MUSEnV6akQk4QhdD
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Thu, Jul 10, 2014 at 03:52:53PM +0200, Baptiste Daroussin wrote:
> On Thu, Jul 10, 2014 at 04:28:13PM +0300, Konstantin Belousov wrote:
> > On Thu, Jul 10, 2014 at 01:04:53PM +0000, Baptiste Daroussin wrote:
> > > Author: bapt
> > > Date: Thu Jul 10 13:04:52 2014
> > > New Revision: 268493
> > > URL: http://svnweb.freebsd.org/changeset/base/268493
> > >=20
> > > Log:
> > >   Support EAGAIN in fetch_writev
> > >  =20
> > >   Reviewed by:	des
> > >   Approved by:	des
> > >=20
> > > Modified:
> > >   head/lib/libfetch/common.c
> > >=20
> > > Modified: head/lib/libfetch/common.c
> > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D
> > > --- head/lib/libfetch/common.c	Thu Jul 10 12:41:58 2014	(r268492)
> > > +++ head/lib/libfetch/common.c	Thu Jul 10 13:04:52 2014	(r268493)
> > > @@ -1110,6 +1110,8 @@ fetch_writev(conn_t *conn, struct iovec=20
> > >  			errno =3D 0;
> > >  			pfd.revents =3D 0;
> > >  			if (poll(&pfd, 1, deltams) < 0) {
> > > +				if (errno =3D=3D EAGAIN)
> > > +					continue;
> > >  				if (errno =3D=3D EINTR && fetchRestartCalls)
> > >  					continue;
> > >  				return (-1);
> >=20
> > How is this error possible ? poll(2) converts EAGAIN from seltdwait(9)
> > to no error.
>=20
> For posix compliance, libfetch is not only used on FreeBSD, reading at:
> http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html I can =
read:
>=20
> [EAGAIN]
>     The allocation of internal data structures failed but a subsequent re=
quest
>     may succeed.
>=20
> Am I missing something?

At least for me, it was very surprising.  I accustomed to the facts that
poll(2) is never restarted after signal, and that you only should test
for EINTR as the error condition.

Apparently, the behaviour of converting EAGAIN to no error can be tracked
back to at least 4.4 lite.  On the other hand, just looking into the man
page for poll(2) on STREAMS-based systems indeed mention EAGAIN.

My suggestion is to add a comment, noting that FreeBSD does not return
EAGAIN from poll(2), but SUSv4 allows it.  This way, the addition would
be not removed in some code cleanup.  Does it sound reasonable ?

--MUSEnV6akQk4QhdD
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBAgAGBQJTvrpmAAoJEJDCuSvBvK1B+SUP/3M5M5xTFMw7g0FKFFUh4hvC
6z29rB1Lkkl07EIM24nTc0LUHg8thJLi1jNIreN70pDY1gdypp47i96DVPjbJ6go
g1o2VIIDVfdDiBcFDsckmr6Iq9FjuzhXAZzclq8ojxghJ6W1aybk7YUymqdYJ14L
xePc1EhjVi29+5gOuhpHmM2eAHblkswAuIQTH4GFZRmhRtbYihK2A0OgilQwrw9z
SURG336OZ0RNdVHkQNICEDFfn1lNGlqAlbet6TQ4hu2HMx+qGcyuKK2WB9EoUQ2T
moTjWfrpiIbhzn1G71YT4vn83qw1cayppjzltoqqOw15FVBLURKmB477IlVxv1d0
0goX6AiXgSAwgxnwuAOkkwxfvZVnNGozplQkUFF7z7RvtQCM6U4l76u/yrBz9VaS
VQ8z6kmIUApMFFk1x5r2V3qgIFlnmwhK+B27eFLPgSf7WN0VHVBMRk+Qs0OJsNiO
i3ILvKzrcr/kGUAFBy5KstvVO/9ZcjDppnzN2kBcsDsvw51XPtwtqKiFjhXn3UxH
C03w+Az+eeWVirTR5jO/kB8L/HR2PlsSRAm0EBpSxL3UlDEec10SkQ02WoNKIz/H
cPeJSnXCqAsNa/Z1eBnEqPwcSBJr/dBZS7SDGRNqhOMRecIjbh3TO5Gsnin65Gk+
iOiT2VSIsVBUOoL+rt9V
=Mtc7
-----END PGP SIGNATURE-----

--MUSEnV6akQk4QhdD--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140710160807.GR93733>