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>