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 */
 
 


syntax highlighted by Code2HTML, v. 0.9.1