]> git.proxmox.com Git - mirror_corosync-qdevice.git/commitdiff
pr-poll-loop: Fix set_events_cb return code
authorJan Friesse <jfriesse@redhat.com>
Mon, 31 Aug 2020 08:08:45 +0000 (10:08 +0200)
committerJan Friesse <jfriesse@redhat.com>
Mon, 31 Aug 2020 15:04:49 +0000 (17:04 +0200)
When events is set to 0 and set_events return -2 it was changed to -1.
Solution is to check, if return code was 0 and only if so, change return
code to -1 if events is 0.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
qdevices/pr-poll-loop.c
qdevices/test-pr-poll-loop.c

index 5ce27e655bfec378dede58f213545b2eeabb19b7..3996958d8024164f98bd433193c588f2efaa3778 100644 (file)
@@ -338,7 +338,7 @@ int prepare_poll_array(struct pr_poll_loop *poll_loop)
                        return (-2);
                }
 
-               if (events == 0) {
+               if (res == 0 && events == 0) {
                        /*
                         * Empty events -> do not add entry
                         */
index d85aa2777c9e222a880a3d4124602fb2bd5ea3bd..6b7c9b94eaa73b2070ab8b95c72299dd8d1113b9 100644 (file)
@@ -523,6 +523,22 @@ test_fd_basics(struct pr_poll_loop *poll_loop)
        assert(fd_set_events_cb1_return_called == 1);
        timer_list_delete(pr_poll_loop_get_timer_list(poll_loop), timeout_timer);
 
+       /*
+        * Remove entry and try with zero events and -2 return callback
+        */
+       assert(pr_poll_loop_del_fd(poll_loop, pipe_fd1[0]) == 0);
+       assert(pr_poll_loop_add_fd(poll_loop, pipe_fd1[0], 0, fd_set_events_cb1_return,
+           NULL, NULL, NULL, (void *)&fd_set_events_cb1_return_called, NULL) == 0);
+
+       fd_set_events_cb1_return_called = 0;
+
+       assert((timeout_timer = timer_list_add(
+           pr_poll_loop_get_timer_list(poll_loop), TIMER_TIMEOUT, timeout_cb, NULL, NULL)) != NULL);
+       assert(pr_poll_loop_exec(poll_loop) == -1);
+
+       assert(fd_set_events_cb1_return_called == 1);
+       timer_list_delete(pr_poll_loop_get_timer_list(poll_loop), timeout_timer);
+
        /*
         * Remove entry and try different cb
         */