]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdmon: avoid using victim_sock when it is -1.
authorNeilBrown <neilb@suse.de>
Mon, 7 Nov 2011 00:44:21 +0000 (11:44 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 7 Nov 2011 00:44:21 +0000 (11:44 +1100)
It possible that we try to use victim_sock even when we couldn't open
it.  This is never actually harmful but it looks wrong and it is best
to fix it.

Signed-off-by: NeilBrown <neilb@suse.de>
mdmon.c

diff --git a/mdmon.c b/mdmon.c
index ee68e3c3b5709c0c3b34cfd8e74fe5a18470a64c..b6ae0e68d390211c9e6fda3faa232822e3c43606 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -189,6 +189,9 @@ static void try_kill_monitor(pid_t pid, char *devname, int sock)
 
        kill(pid, SIGTERM);
 
+       if (sock < 0)
+               return;
+
        /* Wait for monitor to exit by reading from the socket, after
         * clearing the non-blocking flag */
        fl = fcntl(sock, F_GETFL, 0);
@@ -468,6 +471,7 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
                        exit(3);
                }
                close(victim_sock);
+               victim_sock = -1;
        }
        if (container->ss->load_container(container, mdfd, devname)) {
                fprintf(stderr, "mdmon: Cannot load metadata for %s\n",
@@ -501,7 +505,8 @@ static int mdmon(char *devname, int devnum, int must_fork, int takeover)
 
        if (victim > 0) {
                try_kill_monitor(victim, container->devname, victim_sock);
-               close(victim_sock);
+               if (victim_sock >= 0)
+                       close(victim_sock);
        }
 
        setsid();