]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
Fix reporting jobs from state file + misc
[bacula/bacula] / bacula / src / dird / dird.c
index 8842bc62677abd99767c82b57b15c6959b17cec3..b78e35d8667bf2a6d66fdc8a607a6edb8f7b628b 100644 (file)
@@ -208,10 +208,11 @@ int main (int argc, char *argv[])
 
    /* Create pid must come after we are a daemon -- so we have our final pid */
    create_pid_file(director->pid_directory, "bacula-dir", director->DIRport);
+   read_state_file(director->working_directory, "bacula-dir", director->DIRport);
 
    drop(uid, gid);                   /* reduce priveleges if requested */
 
-/* signal(SIGHUP, reload_config); */
+   signal(SIGHUP, reload_config);
 
    init_console_msg(working_directory);
 
@@ -249,8 +250,8 @@ static void terminate_dird(int sig)
       exit(1);
    }
    already_here = TRUE;
-   delete_pid_file(director->pid_directory, "bacula-dir",  
-                  director->DIRport);
+   write_state_file(director->working_directory, "bacula-dir", director->DIRport);
+   delete_pid_file(director->pid_directory, "bacula-dir", director->DIRport);
 // signal(SIGCHLD, SIG_IGN);          /* don't worry about children now */
    term_scheduler();
    if (runjob) {
@@ -280,8 +281,10 @@ static void terminate_dird(int sig)
  */
 static void reload_config(int sig)
 {
-   static int already_here = FALSE;
+   static bool already_here = false;
    sigset_t set;       
+   JCR *jcr;
+   int njobs = 0;
 
    if (already_here) {
       abort();                       /* Oops, recursion -> die */
@@ -290,11 +293,23 @@ static void reload_config(int sig)
    sigfillset(&set);
    sigprocmask(SIG_BLOCK, &set, NULL);
 
+   lock_jcr_chain();
+   LockRes();
+
+   foreach_jcr(jcr) {
+      if (jcr->JobId != 0) {     /* this is a console */
+        njobs++;
+      }
+      free_locked_jcr(jcr);
+   }
+   if (njobs > 0) {
+      goto bail_out;
+   }
+
    free_config_resources();
 
    parse_config(configfile);
 
-   Dmsg0(200, "check_resources()\n");
    if (!check_resources()) {
       Jmsg(NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile);
    }
@@ -303,11 +318,14 @@ static void reload_config(int sig)
    set_working_directory(director->working_directory);
    FDConnectTimeout = director->FDConnectTimeout;
    SDConnectTimeout = director->SDConnectTimeout;
+   Dmsg0(0, "Director's configuration file reread.\n");
+
+bail_out:
+   UnlockRes();
+   unlock_jcr_chain();
    sigprocmask(SIG_UNBLOCK, &set, NULL);
    signal(SIGHUP, reload_config);
-   already_here = FALSE;
-   Dmsg0(0, "Director's configuration file reread.\n");
+   already_here = false;
 }
 
 /*