]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/bsys.c
Make PurgeMigrationJob directive name correspond to doc
[bacula/bacula] / bacula / src / lib / bsys.c
index 60b488731dbe707d1559825afc76d345735659ed..561d0bb723a8f49ed60ec08be823a0644917f32b 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2011 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -547,12 +547,15 @@ bail_out:
 /*
  * Write the state file
  */
+static pthread_mutex_t state_mutex = PTHREAD_MUTEX_INITIALIZER;
+
 void write_state_file(char *dir, const char *progname, int port)
 {
    int sfd;
    bool ok = false;
    POOLMEM *fname = get_pool_memory(PM_FNAME);
-
+   
+   P(state_mutex);                    /* Only one job at a time can call here */
    Mmsg(&fname, "%s/%s.%d.state", dir, progname, port);
    /* Create new state file */
    unlink(fname);
@@ -590,6 +593,7 @@ bail_out:
    if (!ok) {
       unlink(fname);
    }
+   V(state_mutex);
    free_pool_memory(fname);
 }
 
@@ -766,45 +770,42 @@ void stack_trace()
    stack_strings = backtrace_symbols(stack_addrs, stack_depth);
    
    for (size_t i = 3; i < stack_depth; i++) {
-      size_t sz = 200; // just a guess, template names will go much wider
-      char *function = (char *)malloc(sz);
+      size_t sz = 200; /* just a guess, template names will go much wider */
+      char *function = (char *)actuallymalloc(sz);
       char *begin = 0, *end = 0;
-      // find the parentheses and address offset surrounding the mangled name
+      /* find the parentheses and address offset surrounding the mangled name */
       for (char *j = stack_strings[i]; *j; ++j) {
          if (*j == '(') {
             begin = j;
-         }
-         else if (*j == '+') {
+         } else if (*j == '+') {
             end = j;
          }
       }
       if (begin && end) {
          *begin++ = '\0';
          *end = '\0';
-         // found our mangled name, now in [begin, end)
+         /* found our mangled name, now in [begin, end] */
          
          int status;
          char *ret = abi::__cxa_demangle(begin, function, &sz, &status);
          if (ret) {
-            // return value may be a realloc() of the input
+            /* return value may be a realloc() of the input */
             function = ret;
-         }
-         else {
-            // demangling failed, just pretend it's a C function with no args
+         } else {
+            /* demangling failed, just pretend it's a C function with no args */
             strncpy(function, begin, sz);
             strncat(function, "()", sz);
             function[sz-1] = '\0';
          }
          Pmsg2(000, "    %s:%s\n", stack_strings[i], function);
-      }
-      else
-      {
-         // didn't find the mangled name, just print the whole line
+
+      } else {
+         /* didn't find the mangled name, just print the whole line */
          Pmsg1(000, "    %s\n", stack_strings[i]);
       }
-      free(function);
+      actuallyfree(function);
    }
-   free(stack_strings); // malloc()ed by backtrace_symbols
+   actuallyfree(stack_strings); /* malloc()ed by backtrace_symbols */
 }
 #else /* HAVE_BACKTRACE && HAVE_GCC */
 void stack_trace() {}