]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
mdmon: don't fork if DEBUG
authorDan Williams <dan.j.williams@intel.com>
Fri, 25 Jul 2008 00:26:24 +0000 (17:26 -0700)
committerDan Williams <dan.j.williams@intel.com>
Fri, 25 Jul 2008 00:26:24 +0000 (17:26 -0700)
mdmon.c

diff --git a/mdmon.c b/mdmon.c
index d35c05b2d7a9ac779610b3cc932627d318ccdec2..85f44bc27f0355000e6c1be614e7c4ba30bdf2bc 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -169,6 +169,19 @@ static void wake_me(int sig)
 
 }
 
+/* if we are debugging and starting mdmon by hand then don't fork */
+static int do_fork(void)
+{
+       #ifdef DEBUG
+       if (env_no_mdmon())
+               return 0;
+       #endif
+
+       return 1;
+}
+
+
+
 int main(int argc, char *argv[])
 {
        int mdfd;
@@ -196,23 +209,26 @@ int main(int argc, char *argv[])
        }
 
        /* Fork, and have the child tell us when they are ready */
-       pipe(pfd);
-       switch(fork()){
-       case -1:
-               fprintf(stderr, "mdmon: failed to fork: %s\n",
-                       strerror(errno));
-               exit(1);
-       case 0: /* child */
-               close(pfd[0]);
-               break;
-       default: /* parent */
-               close(pfd[1]);
-               if (read(pfd[0], &status, sizeof(status)) != sizeof(status)) {
-                       wait(&status);
-                       status = WEXITSTATUS(status);
+       if (do_fork()) {
+               pipe(pfd);
+               switch(fork()) {
+               case -1:
+                       fprintf(stderr, "mdmon: failed to fork: %s\n",
+                               strerror(errno));
+                       exit(1);
+               case 0: /* child */
+                       close(pfd[0]);
+                       break;
+               default: /* parent */
+                       close(pfd[1]);
+                       if (read(pfd[0], &status, sizeof(status)) != sizeof(status)) {
+                               wait(&status);
+                               status = WEXITSTATUS(status);
+                       }
+                       exit(status);
                }
-               exit(status);
-       }
+       } else
+               pfd[0] = pfd[1] = -1;
        /* hopefully it is a container - we'll check later */
 
        container = malloc(sizeof(*container));