X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fstored%2Fstored.c;h=71d635ed755490950af44a604aebf644e448d287;hb=36b40d5c7f3ff90565ab73ac75f0dc4f6660ff37;hp=94d466168df46ae17270c82db05b2fdc82c0cb52;hpb=be53d53645af7bde48cf414cdecb8229ec9c45af;p=bacula%2Fbacula diff --git a/bacula/src/stored/stored.c b/bacula/src/stored/stored.c index 94d466168d..71d635ed75 100644 --- a/bacula/src/stored/stored.c +++ b/bacula/src/stored/stored.c @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2007 Free Software Foundation Europe e.V. + Copyright (C) 2000-2008 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. @@ -20,7 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - Bacula® is a registered trademark of John Walker. + Bacula® is a registered trademark of Kern Sibbald. The licensor of Bacula is the Free Software Foundation Europe (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ftf@fsfeurope.org. @@ -43,7 +43,7 @@ #include "stored.h" /* Imported functions */ - +extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code); /* Forward referenced functions */ void terminate_stored(int sig); @@ -73,6 +73,7 @@ bool init_done = false; static bool foreground = 0; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static workq_t dird_workq; /* queue for processing connections */ +static CONFIG *config; static void usage() @@ -209,7 +210,8 @@ int main (int argc, char *argv[]) configfile = bstrdup(CONFIG_FILE); } - parse_config(configfile); + config = new_config_parser(); + parse_sd_config(config, configfile, M_ERROR_TERM); if (init_crypto() != 0) { Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n")); @@ -445,6 +447,7 @@ static int check_resources() static void cleanup_old_files() { POOLMEM *cleanup = get_pool_memory(PM_MESSAGE); + POOLMEM *results = get_pool_memory(PM_MESSAGE); int len = strlen(me->working_directory); #if defined(HAVE_WIN32) pm_strcpy(cleanup, "del /q "); @@ -457,8 +460,9 @@ static void cleanup_old_files() } pm_strcat(cleanup, my_name); pm_strcat(cleanup, "*.spool"); - run_program(cleanup, 0, NULL); + run_program(cleanup, 0, results); free_pool_memory(cleanup); + free_pool_memory(results); } @@ -478,7 +482,7 @@ void *device_initialization(void *arg) pthread_detach(pthread_self()); jcr = new_jcr(sizeof(JCR), stored_free_jcr); - jcr->JobType = JT_SYSTEM; + jcr->set_JobType(JT_SYSTEM); /* Initialize FD start condition variable */ int errstat = pthread_cond_init(&jcr->job_start_wait, NULL); if (errstat != 0) { @@ -551,6 +555,7 @@ void terminate_stored(int sig) exit(1); } in_here = true; + debug_level = 0; /* turn off any debug */ stop_watchdog(); if (sig == SIGTERM) { /* normal shutdown request? */ @@ -594,6 +599,8 @@ void terminate_stored(int sig) Dmsg1(200, "In terminate_stored() sig=%d\n", sig); + free_volume_list(); + foreach_res(device, R_DEVICE) { Dmsg1(10, "Term device %s\n", device->device_name); if (device->dev) { @@ -609,14 +616,17 @@ void terminate_stored(int sig) free(configfile); configfile = NULL; } - free_config_resources(); + if (config) { + config->free_resources(); + free(config); + config = NULL; + } if (debug_level > 10) { print_memory_pool_stats(); } term_msg(); cleanup_crypto(); - free_volume_list(); term_reservations_lock(); close_memory_pool();