|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.5] tools/oxenstored: Fix | vs & error in fd event handling
On Wed, Nov 26, 2014 at 06:24:11PM +0000, Dave Scott wrote:
>
> > On 26 Nov 2014, at 15:38, Zheng Li <dev@xxxxxxxx> wrote:
> >
> > On 26/11/2014 15:09, Andrew Cooper wrote:
> >> This makes fields 0 and 1 true more often than they should be, resulting
> >> problems when handling events.
> >
> > Indeed, looks like a mistake I made when rewriting the logic terms lately.
> > The result is POLLUP or POLLERR events being returned in more categories
> > than we'd interest. Thanks for fixing this!
> >
> > Acked-by: Zheng Li <dev@xxxxxxxx>
>
> This also looks fine to me
>
> Acked-by: David Scott <dave.scott@xxxxxxxxxx>
Would it be possible to get an Reviewed-by please?
Thank you.
>
> Cheers,
> Dave
>
> >
> >
> > Cheers,
> > Zheng
> >
> >
> >> ---
> >>
> >> This was discovered with XenServers internal Coverity instance. I have
> >> yet to
> >> work out why the issue is not identified by the upstream coverity scanning.
> >>
> >> Konrad: This is a bug in the default event handling used by oxenstored in
> >> 4.5,
> >> as the default switched from select() to poll() in the 4.5 timeframe. It
> >> would appear that the negative side effects are limited to just logspam
> >> about
> >> certain clients attempting invalid actions, but I can't rule out anything
> >> more
> >> problematic.
> >> ---
> >> tools/ocaml/xenstored/select_stubs.c | 4 ++--
> >> 1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/tools/ocaml/xenstored/select_stubs.c
> >> b/tools/ocaml/xenstored/select_stubs.c
> >> index 4a8edb5..af72b84 100644
> >> --- a/tools/ocaml/xenstored/select_stubs.c
> >> +++ b/tools/ocaml/xenstored/select_stubs.c
> >> @@ -56,8 +56,8 @@ CAMLprim value stub_select_on_poll(value fd_events,
> >> value timeo) {
> >> events = Field(Field(fd_events, i), 1);
> >>
> >> if (c_fds[i].revents & POLLNVAL) unix_error(EBADF,
> >> "select", Nothing);
> >> - Field(events, 0) = Val_bool(c_fds[i].events | POLLIN
> >> && c_fds[i].revents & (POLLIN |POLLHUP|POLLERR));
> >> - Field(events, 1) = Val_bool(c_fds[i].events | POLLOUT
> >> && c_fds[i].revents & (POLLOUT|POLLHUP|POLLERR));
> >> + Field(events, 0) = Val_bool(c_fds[i].events & POLLIN
> >> && c_fds[i].revents & (POLLIN |POLLHUP|POLLERR));
> >> + Field(events, 1) = Val_bool(c_fds[i].events & POLLOUT
> >> && c_fds[i].revents & (POLLOUT|POLLHUP|POLLERR));
> >> Field(events, 2) = Val_bool(c_fds[i].revents & POLLPRI);
> >>
> >> }
> >>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |