[PATCH] Fix epoll backend to allow separate read/write events on one fd.
Jeremy Allison
jra at samba.org
Thu Feb 14 11:04:58 MST 2013
On Thu, Feb 14, 2013 at 03:18:27PM +0100, Stefan (metze) Metzmacher wrote:
> Hi Jeremy,
>
> >> The tdgram_context and tstream_context abstractions only need one tevent_fd.
> >>
> >> At least we should allow only one TEVENT_FD_READ handler and only one
> >> TEVENT_FD_WRITE handler
> >> for each fd.
> >
> > That is the idiom I think it's right to standardize on,
> > and that's what my patch does.
>
> I see the protection against more than two handlers.
>
> >> But I'd think it's better to avoid additional complexity in
> >> the epoll backend,
> >> which is already complex.
> >
> > Yeah yeah - it's still a *lot* simpler than the poll backend,
> > even *with* my multiplexing patch :-) :-).
>
> Ok, looking at the patches your're right :-)
>
> The tricky part is the EPOLL_ADDITIONAL_FD_FLAG_GOT_ERROR
> and EPOLL_ADDITIONAL_FD_FLAG_REPORT_ERROR. I don't think that's
> handled correct in your patches.
Ok, I'll take a look and see what I might have missed.
> I'm also not sure if the EPOLL_ADDITIONAL_FD_FLAG_HAS_EVENT is filled
> and cleared correctly.
I was pretty sure I got that right, but will examine
more closely in case I missed something.
> Can you change the code to store the pointer to the other event
> in fde->addtitional_data toghether with the
> EPOLL_ADDITIONAL_FD_WAS_MULTIPLEXED
> flag? That would avoid a list traverse for a lot of cases.
> We need a destructor that removes the cross-reference on delete.
Ok, I'll look at this.
> This way we can preferr the write handler over the read handler
> and also make sure that tevent_fd_set_flags doesn't set the same flag
> to both handlers.
That's a change in behavior of the epoll backend. I'm not
disagreeing, but I think that should be a subsequent patch,
not part of this one.
> It would be good to enforce the rule of just one fd event for
> TEVENT_FD_READ and just one fd event for TEVENT_FD_WRITE.
> We need to enforce this on tevent_add_fd() and on tevent_fd_set_flags()
> and for all backends.
Again, I think that should be a follow-up patch, not
part of this. Once we've got this fixed in the epoll backend
then a subsequent patch should enforce these rules.
> It's good to get this finally fixed, thanks!
Thanks for the review !
Cheers,
Jeremy.
More information about the samba-technical
mailing list