tevent: avoid calling epoll_update_event() again if epoll_check_reopen() already...
authorStefan Metzmacher <metze@samba.org>
Wed, 11 Jan 2023 07:21:47 +0000 (08:21 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 19 Jul 2023 08:02:33 +0000 (08:02 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
lib/tevent/tevent_epoll.c

index fec47972c93acfe97d9debb4fe2a685424a81cc6..2771a83fdd2669ff7cddc68b6067ada9871fb23c 100644 (file)
@@ -843,6 +843,7 @@ static struct tevent_fd *epoll_event_add_fd(struct tevent_context *ev, TALLOC_CT
                struct epoll_event_context);
        struct tevent_fd *fde;
        bool panic_triggered = false;
+       pid_t old_pid = epoll_ev->pid;
 
        fde = tevent_common_add_fd(ev, mem_ctx, fd, flags,
                                   handler, private_data,
@@ -860,7 +861,9 @@ static struct tevent_fd *epoll_event_add_fd(struct tevent_context *ev, TALLOC_CT
                epoll_ev->panic_state = NULL;
        }
 
-       epoll_update_event(epoll_ev, fde);
+       if (epoll_ev->pid == old_pid) {
+               epoll_update_event(epoll_ev, fde);
+       }
 
        return fde;
 }
@@ -873,12 +876,14 @@ static void epoll_event_set_fd_flags(struct tevent_fd *fde, uint16_t flags)
        struct tevent_context *ev;
        struct epoll_event_context *epoll_ev;
        bool panic_triggered = false;
+       pid_t old_pid;
 
        if (fde->flags == flags) return;
 
        ev = fde->event_ctx;
        epoll_ev = talloc_get_type_abort(ev->additional_data,
                                         struct epoll_event_context);
+       old_pid = epoll_ev->pid;
 
        fde->flags = flags;
 
@@ -891,7 +896,9 @@ static void epoll_event_set_fd_flags(struct tevent_fd *fde, uint16_t flags)
                epoll_ev->panic_state = NULL;
        }
 
-       epoll_update_event(epoll_ev, fde);
+       if (epoll_ev->pid == old_pid) {
+               epoll_update_event(epoll_ev, fde);
+       }
 }
 
 /*