Conditions always true in tevent_standard.c
Jeremy Allison
jra at samba.org
Tue Jun 28 17:30:09 UTC 2016
On Tue, Jun 28, 2016 at 02:07:10PM +0300, Nikolai Kondrashov wrote:
> Hi everyone,
>
> I was reading about tevent and browsing the code, when I noticed these two
> conditions in tevent_standard.c:
>
> ret = glue->epoll_ops->loop_once(ev, location);
> if (glue->epoll_ops != NULL) {
> /* No fallback */
> return ret;
> }
>
> and
>
> ret = glue->epoll_ops->loop_wait(ev, location);
> if (glue->epoll_ops != NULL) {
> /* No fallback */
> return ret;
> }
>
> To me it seems they are never going to be false (the program would segfault
> before they are reached if glue->epoll_ops is NULL) and I suspect there's some
> logic bug here. However, unfortunately, I don't have time to figure out what
> exactly should be done about this, so I'll leave it up to you.
No, it isn't a logic bug (I had to explain the same thing to a
Google engineer). The epoll backend can fall back on an epoll
syscall failure (early versions of Linux might have had problems
here) so check out the code in tevent_standard.c:
#ifdef HAVE_EPOLL
tevent_epoll_set_panic_fallback(ev, std_fallback_to_poll);
#endif
> Still, if there's some purpose to that, then I think a comment is in order.
Please submit a comment as a git-am patch, once you grok the code :-).
Note there is already the comment:
120 if (!glue->fallback_replay) {
121 /*
122 * The problem happened while modifying an event.
123 * An event handler was triggered in this case
124 * and there is no need to call loop_once() again.
125 */
126 return ret;
127 }
More information about the samba-technical
mailing list