Il 07/09/2012 17:01, Joachim Schmitz ha scritto: >> From: Paolo Bonzini [mailto:paolo.bonz...@gmail.com] On Behalf Of Paolo >> Bonzini >> Sent: Friday, September 07, 2012 4:47 PM >> To: Joachim Schmitz >> Cc: bug-gnulib@gnu.org; rsbec...@nexbridge.com >> Subject: Re: poll() emulation in git/gnulib >> >> Il 07/09/2012 12:58, Joachim Schmitz ha scritto: >>>> From: Paolo Bonzini [mailto:paolo.bonz...@gmail.com] On Behalf Of Paolo >>>> Bonzini >>>> Sent: Friday, September 07, 2012 11:41 AM >>>> To: Joachim Schmitz >>>> Cc: g...@vger.kernel.org; 'Junio C Hamano'; 'Erik Faye-Lund'; >>>> bug-gnulib@gnu.org; rsbec...@nexbridge.com >>>> Subject: Re: poll() emulation in git >>>> >>>> Il 07/09/2012 09:39, Joachim Schmitz ha scritto: >>>>>>> I suppose it works to always handle ENOTSOCK that way, even on >>>>>>> non-__TANDEM systems. >>>>> Will you be fixing this in gnulib? How? >>>> >>>> I don't have access to the system, so it's best if you post the patches >>>> yourself to bug-gnulib and git mailing lists (separately, since the code >>>> is cross-pollinated but forked). >>> >>> Here's the patch hat fixed the problems for me. >>> Whether or not to keep the #ifdef __TANDEM and/or to enable the commented >>> additional check, to make it usable for non HP NonStop > I >>> don't know... >> >> Please remove it, > > Remove what, just the "#ifdef __TANDEM" and "#endif" or the comment for the > "(r == -1) &&" too? > >> and change the comment to "some systems can't use >> recv() on non-socket, including HP NonStop". > > OK. > >> Also please add a ChangeLog. I'll commit the patch then. > > An entry in the ChangeLog file, right? > > Assuming this and that you just want the #ifdef __TANDEM removed: > > diff --git a/ChangeLog b/ChangeLog > index 282e060..8e51746 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,3 +1,8 @@ > +2012-09-06 Joachim Schmitz <j...@schmitz-digital.de> > + > + poll: fix for systems that can't recv() on a non-socket > + poll: don't exit early if NULL is the 1st arg to poll() > + > 2012-09-06 Eric Blake <ebl...@redhat.com> > > net_if: give more details about the bug being fixeddiff --git > a/lib/poll.c b/lib/poll.c > index 5ad9d86..62430bb 100644 > --- a/lib/poll.c > +++ b/lib/poll.c > @@ -303,6 +303,10 @@ compute_revents (int fd, int sought, fd_set *rfds, > fd_set * > || socket_errno == ECONNABORTED || socket_errno == ENETRESET) > happened |= POLLHUP; > > + /* some systems can't use recv() on non-socket, including HP NonStop */ > + else if (/* (r == -1) && */ socket_errno == ENOTSOCK) > + happened |= (POLLIN | POLLRDNORM) & sought; > + > else > happened |= POLLERR; > } > @@ -350,7 +354,7 @@ poll (struct pollfd *pfd, nfds_t nfd, int timeout) > > /* EFAULT is not necessary to implement, but let's do it in the > simplest case. */ > - if (!pfd) > + if (!pfd && nfd) > { > errno = EFAULT; > return -1; > >
Ok, thanks (will get to it on Monday). Paolo