]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
tevent: Clarify apparently useless conditions
authorNikolai Kondrashov <Nikolai.Kondrashov@redhat.com>
Wed, 29 Jun 2016 12:05:08 +0000 (15:05 +0300)
committerUri Simchoni <uri@samba.org>
Tue, 12 Jul 2016 11:56:41 +0000 (13:56 +0200)
Comment on two similar conditions in tevent_standard.c, which,
otherwise, at a first glance, seem useless, i.e. always true.

The conditions checking glue->epoll_ops for being non-NULL, imply that
it *can* be NULL. A casual reader would not generally expect a "member"
function to modify its container's pointer in a container higher up, and
would assume that glue->epoll_ops could be NULL before the call,
resulting in a near-NULL pointer dereference.

However, in this case epoll_ops is indeed cleared in those "member"
functions, in the case of an epoll interface failure, to signify
fallback to poll interface.

Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
Autobuild-User(master): Uri Simchoni <uri@samba.org>
Autobuild-Date(master): Tue Jul 12 13:56:41 CEST 2016 on sn-devel-144

lib/tevent/tevent_standard.c

index a050901fa3f5482ddc597d755362b997fc6676c7..30e9b91a865161892b3fc2a16ea9d2c8e49ecde1 100644 (file)
@@ -112,6 +112,11 @@ static int std_event_loop_once(struct tevent_context *ev, const char *location)
        int ret;
 
        ret = glue->epoll_ops->loop_once(ev, location);
+       /*
+        * If the above hasn't panicked due to an epoll interface failure,
+        * std_fallback_to_poll() wasn't called, and hasn't cleared epoll_ops to
+        * signify fallback to poll_ops.
+        */
        if (glue->epoll_ops != NULL) {
                /* No fallback */
                return ret;
@@ -138,6 +143,11 @@ static int std_event_loop_wait(struct tevent_context *ev, const char *location)
        int ret;
 
        ret = glue->epoll_ops->loop_wait(ev, location);
+       /*
+        * If the above hasn't panicked due to an epoll interface failure,
+        * std_fallback_to_poll() wasn't called, and hasn't cleared epoll_ops to
+        * signify fallback to poll_ops.
+        */
        if (glue->epoll_ops != NULL) {
                /* No fallback */
                return ret;