/* 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);
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) {
*/
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 */
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);
}
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;
}
/*