]> git.ipfire.org Git - thirdparty/mdadm.git/blobdiff - managemon.c
Move calls to SET_ARRAY_INFO to common helper.
[thirdparty/mdadm.git] / managemon.c
index fc5da713feffc5f61d23980cb63157fb0aebf4ad..dc3ff7f2f0edd9abbc4fedb7fee827b645aad39a 100644 (file)
@@ -346,7 +346,11 @@ static void manage_member(struct mdstat_ent *mdstat,
                                struct mdinfo *newd;
                                if (sysfs_add_disk(&newa->info, d) < 0)
                                        continue;
-                               newd = newa->info.devs;
+                               newd = malloc(sizeof(*newd));
+                               *newd = *d;
+                               newd->next = newa->info.devs;
+                               newa->info.devs = newd;
+
                                newd->state_fd = sysfs_open(a->devnum,
                                                            newd->sys_name,
                                                            "state");
@@ -605,6 +609,7 @@ void do_manager(struct supertype *container)
 
        sigprocmask(SIG_UNBLOCK, NULL, &set);
        sigdelset(&set, SIGUSR1);
+       sigdelset(&set, SIGHUP);
 
        do {
 
@@ -622,6 +627,13 @@ void do_manager(struct supertype *container)
 
                        read_sock(container);
 
+                       if (socket_hup_requested) {
+                               close(container->sock);
+                               container->sock = make_control_sock(container->devname);
+                               make_pidfile(container->devname, 0);
+                               socket_hup_requested = 0;
+                       }
+
                        free_mdstat(mdstat);
                }
                remove_old();