libmultipath: cleanup pthread_cleanup_pop call
authorBenjamin Marzinski <bmarzins@redhat.com>
Wed, 28 Nov 2018 06:13:23 +0000 (00:13 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Fri, 7 Dec 2018 15:48:08 +0000 (16:48 +0100)
pthread_cleanup_push() and pthread_cleanup_pop() must be called in the
same lexical scope.  In uevent_listen(), the pthread_cleanup_pop() call
to cleanup the udev monitor is called in a nested 'if' block, within
the block where pthread_cleanup_push() is called.  Since this is a
single-statement if block, it doesn't actually cause any problems, but
it should be fixed anyways.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
libmultipath/uevent.c

index 5f910e6..f73de8c 100644 (file)
@@ -806,7 +806,7 @@ int uevent_listen(struct udev *udev)
        monitor = udev_monitor_new_from_netlink(udev, "udev");
        if (!monitor) {
                condlog(2, "failed to create udev monitor");
        monitor = udev_monitor_new_from_netlink(udev, "udev");
        if (!monitor) {
                condlog(2, "failed to create udev monitor");
-               goto out;
+               goto failback;
        }
        pthread_cleanup_push(monitor_cleanup, monitor);
 #ifdef LIBUDEV_API_RECVBUF
        }
        pthread_cleanup_push(monitor_cleanup, monitor);
 #ifdef LIBUDEV_API_RECVBUF
@@ -893,8 +893,8 @@ int uevent_listen(struct udev *udev)
        }
        need_failback = 0;
 out:
        }
        need_failback = 0;
 out:
-       if (monitor)
-               pthread_cleanup_pop(1);
+       pthread_cleanup_pop(1);
+failback:
        if (need_failback)
                err = failback_listen();
        pthread_cleanup_pop(1);
        if (need_failback)
                err = failback_listen();
        pthread_cleanup_pop(1);