Index: src/filed/job.c =================================================================== --- src/filed/job.c (revision 5235) +++ src/filed/job.c (working copy) @@ -266,9 +266,6 @@ bnet_sig(jcr->store_bsock, BNET_TERMINATE); } - /* Run the after job */ - run_scripts(jcr, jcr->RunScripts, "ClientAfterJob"); - generate_daemon_event(jcr, "JobEnd"); dequeue_messages(jcr); /* send any queued messages */ @@ -1321,7 +1318,25 @@ return bnet_fsend(dir, OKstore); } +static void job_end(JCR *jcr) +{ + char ed1[50], ed2[50]; + /* Inform Storage daemon that we are done */ + if (jcr->store_bsock) { + bnet_sig(jcr->store_bsock, BNET_TERMINATE); + } + + /* Run the after job */ + run_scripts(jcr, jcr->RunScripts, "ClientAfterJob"); + + bnet_fsend(jcr->dir_bsock, EndJob, jcr->JobStatus, jcr->JobFiles, + edit_uint64(jcr->ReadBytes, ed1), + edit_uint64(jcr->JobBytes, ed2), jcr->Errors, (int)jcr->VSS, + jcr->pki_encrypt); + Dmsg1(110, "End FD msg: %s\n", jcr->dir_bsock->msg); +} + /* * Do a backup. */ @@ -1331,15 +1346,13 @@ BSOCK *sd = jcr->store_bsock; int ok = 0; int SDJobStatus; - char ed1[50], ed2[50]; - bool bDoVSS = false; #if defined(WIN32_VSS) // capture state here, if client is backed up by multiple directors // and one enables vss and the other does not then enable_vss can change // between here and where its evaluated after the job completes. - bDoVSS = g_pVSSClient && enable_vss; - if (bDoVSS) { + jcr->VSS = g_pVSSClient && enable_vss; + if (jcr->VSS) { /* Run only one at a time */ P(vss_mutex); } @@ -1395,7 +1408,7 @@ #if defined(WIN32_VSS) /* START VSS ON WIN 32 */ - if (bDoVSS) { + if (jcr->VSS) { if (g_pVSSClient->InitializeForBackup()) { /* tell vss which drives to snapshot */ char szWinDriveLetters[27]; @@ -1488,7 +1501,7 @@ #if defined(WIN32_VSS) /* STOP VSS ON WIN 32 */ /* tell vss to close the backup session */ - if (bDoVSS) { + if (jcr->VSS) { if (g_pVSSClient->CloseBackup()) { /* inform user about writer states */ for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { @@ -1504,12 +1517,8 @@ } #endif - bnet_fsend(dir, EndJob, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->ReadBytes, ed1), - edit_uint64(jcr->JobBytes, ed2), jcr->Errors, (int)bDoVSS, - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); - + job_end(jcr); + return 0; /* return and stop command loop */ } @@ -1585,12 +1594,7 @@ bnet_sig(dir, BNET_EOD); - /* Send termination status back to Dir */ - bnet_fsend(dir, EndJob, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->ReadBytes, ed1), - edit_uint64(jcr->JobBytes, ed2), jcr->Errors, 0, - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); + job_end(jcr); /* Inform Director that we are done */ bnet_sig(dir, BNET_TERMINATE); @@ -1696,13 +1700,9 @@ if (jcr->Errors) { set_jcr_job_status(jcr, JS_ErrorTerminated); } - /* Send termination status back to Dir */ - bnet_fsend(dir, EndJob, jcr->JobStatus, jcr->JobFiles, - edit_uint64(jcr->ReadBytes, ed1), - edit_uint64(jcr->JobBytes, ed2), jcr->Errors, 0, - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); + job_end(jcr); + /* Inform Director that we are done */ bnet_sig(dir, BNET_TERMINATE); Index: src/jcr.h =================================================================== --- src/jcr.h (revision 5235) +++ src/jcr.h (working copy) @@ -297,6 +297,7 @@ int32_t pki_session_encoded_size; /* Size of DER-encoded pki_session */ POOLMEM *crypto_buf; /* Encryption/Decryption buffer */ DIRRES* director; /* Director resource */ + bool VSS; /* VSS used by FD */ #endif /* FILE_DAEMON */