X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffiled%2Fjob.c;h=e81f608342c3203ca1079fa4f0d21b4e3cdb9e32;hb=9471da7e0b684cb2da6a5bc4ecb3a73cc3ddac52;hp=61d1ca10778c3e9ec49d364c41870b2b47da2a89;hpb=e95021b0bb11f9a065bacae8c0385c40bef1a9c7;p=bacula%2Fbacula diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 61d1ca1077..e81f608342 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -6,7 +6,7 @@ The main author of Bacula is Kern Sibbald, with contributions from 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 + modify it under the terms of version three of the GNU Affero General Public License as published by the Free Software Foundation and included in the file LICENSE. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -402,11 +402,13 @@ void *handle_client_request(void *dirp) free_jcr(jcr); /* destroy JCR record */ Dmsg0(100, "Done with free_jcr\n"); Dsm_check(1); + garbage_collect_memory_pool(); return NULL; } static int sm_dump_cmd(JCR *jcr) { + close_memory_pool(); sm_dump(false, true); jcr->dir_bsock->fsend("2000 sm_dump OK\n"); return 1; @@ -450,13 +452,13 @@ static int cancel_cmd(JCR *jcr) if (!(cjcr=get_jcr_by_full_name(Job))) { dir->fsend(_("2901 Job %s not found.\n"), Job); } else { + generate_plugin_event(cjcr, bEventCancelCommand, NULL); + set_jcr_job_status(cjcr, JS_Canceled); if (cjcr->store_bsock) { cjcr->store_bsock->set_timed_out(); cjcr->store_bsock->set_terminated(); cjcr->my_thread_send_signal(TIMEOUT_SIGNAL); } - generate_plugin_event(cjcr, bEventCancelCommand, NULL); - set_jcr_job_status(cjcr, JS_Canceled); free_jcr(cjcr); dir->fsend(_("2001 Job %s marked to be canceled.\n"), Job); } @@ -1827,23 +1829,22 @@ static int backup_cmd(JCR *jcr) int i; for (i=0; i < (int)strlen(szWinDriveLetters); i++) { if (islower(szWinDriveLetters[i])) { - Jmsg(jcr, M_WARNING, 0, _("Generate VSS snapshot of drive \"%c:\\\" failed. VSS support is disabled on this drive.\n"), szWinDriveLetters[i]); - jcr->JobErrors++; + Jmsg(jcr, M_FATAL, 0, _("Generate VSS snapshot of drive \"%c:\\\" failed.\n"), szWinDriveLetters[i]); } } /* inform user about writer states */ - for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++) + for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++) { if (g_pVSSClient->GetWriterState(i) < 1) { Jmsg(jcr, M_INFO, 0, _("VSS Writer (PrepareForBackup): %s\n"), g_pVSSClient->GetWriterInfo(i)); - //jcr->JobErrors++; } + } } } else { - Jmsg(jcr, M_INFO, 0, _("No drive letters found for generating VSS snapshots.\n")); + Jmsg(jcr, M_FATAL, 0, _("No drive letters found for generating VSS snapshots.\n")); } } else { berrno be; - Jmsg(jcr, M_WARNING, 0, _("VSS was not initialized properly. VSS support is disabled. ERR=%s\n"), be.bstrerror()); + Jmsg(jcr, M_FATAL, 0, _("VSS was not initialized properly. ERR=%s\n"), be.bstrerror()); } run_scripts(jcr, jcr->RunScripts, "ClientAfterVSS"); } @@ -1906,6 +1907,7 @@ cleanup: #if defined(WIN32_VSS) if (jcr->VSS) { Win32ConvCleanupCache(); + g_pVSSClient->DestroyWriterInfo(); V(vss_mutex); } #endif @@ -2152,11 +2154,12 @@ static int restore_cmd(JCR *jcr) #if defined(WIN32_VSS) /* STOP VSS ON WIN32 */ /* tell vss to close the restore session */ - Dmsg0(0, "About to call CloseRestore\n"); + Dmsg0(100, "About to call CloseRestore\n"); if (jcr->VSS) { - Dmsg0(0, "Really about to call CloseRestore\n"); + generate_plugin_event(jcr, bEventVssBeforeCloseRestore); + Dmsg0(100, "Really about to call CloseRestore\n"); if (g_pVSSClient->CloseRestore()) { - Dmsg0(0, "CloseRestore success\n"); + Dmsg0(100, "CloseRestore success\n"); /* inform user about writer states */ for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { int msg_type = M_INFO; @@ -2168,7 +2171,7 @@ static int restore_cmd(JCR *jcr) } } else - Dmsg1(0, "CloseRestore fail - %08x\n", errno); + Dmsg1(100, "CloseRestore fail - %08x\n", errno); V(vss_mutex); } #endif @@ -2192,6 +2195,10 @@ bail_out: ret = 0; /* we stop here */ } + if (job_canceled(jcr)) { + ret = 0; /* we stop here */ + } + return ret; }