X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fjob.c;h=70be904b25069ab1c3dd83bcf47294726a3eae40;hb=c205f98aff775e96e18dc0af2f194e76f2ddaaa9;hp=bd0be764f82ba27438943b1363c4582f7c2642cf;hpb=1c66cf94063f64b0fbabc934749d41268ca92b96;p=bacula%2Fbacula diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index bd0be764f8..70be904b25 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -7,8 +7,8 @@ many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can redistribute it and/or modify it under the terms of version two of the GNU General Public - License as published by the Free Software Foundation plus additions - that are listed in the file LICENSE. + License as published by the Free Software Foundation and included + in the file LICENSE. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -213,6 +213,7 @@ bool setup_job(JCR *jcr) } generate_job_event(jcr, "JobInit"); + Dsm_check(1); return true; bail_out: @@ -238,7 +239,7 @@ static void *job_thread(void *arg) jcr->my_thread_id = pthread_self(); pthread_detach(jcr->my_thread_id); - sm_check(__FILE__, __LINE__, true); + Dsm_check(1); Dmsg0(200, "=====Start Job=========\n"); set_jcr_job_status(jcr, JS_Running); /* this will be set only if no error */ @@ -440,6 +441,7 @@ static void job_monitor_watchdog(watchdog_t *self) control_jcr = (JCR *)self->data; + Dsm_check(1); Dmsg1(800, "job_monitor_watchdog %p called\n", self); foreach_jcr(jcr) { @@ -802,14 +804,14 @@ void dird_free_jcr(JCR *jcr) pthread_cond_destroy(&jcr->term_wait); jcr->term_wait_inited = false; } + if (jcr->db_batch && jcr->db_batch != jcr->db) { + db_close_database(jcr, jcr->db_batch); + } + jcr->db_batch = NULL; if (jcr->db) { db_close_database(jcr, jcr->db); jcr->db = NULL; } - if (jcr->db_batch) { - db_close_database(jcr, jcr->db_batch); - jcr->db_batch = NULL; - } if (jcr->stime) { Dmsg0(200, "Free JCR stime\n"); free_pool_memory(jcr->stime); @@ -974,7 +976,7 @@ void copy_rwstorage(JCR *jcr, alist *storage, const char *where) } -/* Set storage override */ +/* Set storage override. Releases any previous storage definition */ void set_rwstorage(JCR *jcr, USTORE *store) { if (!store) { @@ -1024,7 +1026,7 @@ void copy_rstorage(JCR *jcr, alist *storage, const char *where) } -/* Set storage override */ +/* Set storage override. Remove all previous storage */ void set_rstorage(JCR *jcr, USTORE *store) { STORE *storage; @@ -1032,6 +1034,9 @@ void set_rstorage(JCR *jcr, USTORE *store) if (!store->store) { return; } + if (jcr->rstorage) { + free_rstorage(jcr); + } if (!jcr->rstorage) { jcr->rstorage = New(alist(10, not_owned_by_alist)); } @@ -1085,7 +1090,7 @@ void copy_wstorage(JCR *jcr, alist *storage, const char *where) } -/* Set storage override */ +/* Set storage override. Remove all previous storage */ void set_wstorage(JCR *jcr, USTORE *store) { STORE *storage; @@ -1093,6 +1098,9 @@ void set_wstorage(JCR *jcr, USTORE *store) if (!store->store) { return; } + if (jcr->wstorage) { + free_wstorage(jcr); + } if (!jcr->wstorage) { jcr->wstorage = New(alist(10, not_owned_by_alist)); }