[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: poll() emulation in git/gnulib
From: |
Joachim Schmitz |
Subject: |
RE: poll() emulation in git/gnulib |
Date: |
Fri, 7 Sep 2012 17:01:59 +0200 |
> From: Paolo Bonzini [mailto:address@hidden On Behalf Of Paolo Bonzini
> Sent: Friday, September 07, 2012 4:47 PM
> To: Joachim Schmitz
> Cc: address@hidden; address@hidden
> Subject: Re: poll() emulation in git/gnulib
>
> Il 07/09/2012 12:58, Joachim Schmitz ha scritto:
> >> From: Paolo Bonzini [mailto:address@hidden On Behalf Of Paolo Bonzini
> >> Sent: Friday, September 07, 2012 11:41 AM
> >> To: Joachim Schmitz
> >> Cc: address@hidden; 'Junio C Hamano'; 'Erik Faye-Lund'; address@hidden;
> >> address@hidden
> >> 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 <address@hidden>
+
+ 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 <address@hidden>
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;