]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Separate dequeuing msgs and dequeuing daemon msgs
authorKern Sibbald <kern@sibbald.com>
Thu, 19 Jul 2018 18:34:30 +0000 (20:34 +0200)
committerKern Sibbald <kern@sibbald.com>
Thu, 19 Jul 2018 18:34:30 +0000 (20:34 +0200)
bacula/src/dird/job.c
bacula/src/filed/job.c
bacula/src/lib/jcr.c
bacula/src/lib/message.c
bacula/src/lib/protos.h
bacula/src/stored/dircmd.c
bacula/src/stored/fd_cmds.c
bacula/src/stored/vbackup.c

index f6a0cb7293b4504360cc0bddcb84f6e9edd32dd5..4278f4b09bee9d171ce479babb80b8ce78347eb0 100644 (file)
@@ -499,6 +499,7 @@ static void *job_thread(void *arg)
    generate_daemon_event(jcr, "JobEnd");
    generate_plugin_event(jcr, bDirEventJobEnd);
    Dmsg1(50, "======== End Job stat=%c ==========\n", jcr->JobStatus);
+   dequeue_daemon_messages(jcr);
    Dsm_check(100);
    return NULL;
 }
index 2c9ebedd25b55323da47a18989ea90af6c11ea1c..c42bd2e9b006e878856f73eeb57b470d0bfea5d5 100644 (file)
@@ -387,6 +387,7 @@ static void *handle_director_request(BSOCK *dir)
 bail_out:
    dequeue_messages(jcr);  /* send any queued messages, will no longer impact
                             * the job status... */
+   dequeue_daemon_messages(jcr);
 
    /* Inform Director that we are done */
    dir->signal(BNET_TERMINATE);
index 8aafd522d61aadd9aa2a70af44be3bc794c32603..a1ca4467cf1bb01deb70d10ab7d92956b18c6e33 100644 (file)
@@ -544,6 +544,7 @@ void free_jcr(JCR *jcr)
    unlock_jcr_chain();
 
    dequeue_messages(jcr);
+   dequeue_daemon_messages(jcr);
    close_msg(jcr);                    /* close messages for this job */
    job_end_pop(jcr);                  /* pop and call hooked routines */
 
index 3b7315177a08135009447df5d9a7ed5a4357add4..6b553c0279223c5f9ed7ac89b13279406c6bca14 100644 (file)
@@ -1739,18 +1739,13 @@ void Qmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...)
 }
 
 /*
- * Dequeue messages
+ * Dequeue daemon messages
  */
-void dequeue_messages(JCR *jcr)
+void dequeue_daemon_messages(JCR *jcr)
 {
    MQUEUE_ITEM *item;
    JobId_t JobId;
 
-   /* Avoid bad calls and recursion */
-   if (!jcr || jcr->dequeuing_msgs) {
-      return;
-   }
-
    /* Dequeue daemon messages */
    if (daemon_msg_queue && !dequeuing_daemon_msgs) {
       P(daemon_msg_queue_mutex);
@@ -1770,6 +1765,20 @@ void dequeue_messages(JCR *jcr)
       dequeuing_daemon_msgs = false;
       V(daemon_msg_queue_mutex);
    }
+}
+
+/*
+ * Dequeue messages
+ */
+void dequeue_messages(JCR *jcr)
+{
+   MQUEUE_ITEM *item;
+
+   /* Avoid bad calls and recursion */
+   if (!jcr || jcr->dequeuing_msgs) {
+      return;
+   }
+
 
    /* Dequeue Job specific messages */
    if (!jcr->msg_queue || jcr->dequeuing_msgs) {
index 93519da95806d1b70e3f257f5d785875d8863228..e9730a6b0269c64bf6cc79ea6905a4256062716c 100644 (file)
@@ -265,6 +265,7 @@ void       dispatch_message      (JCR *jcr, int type, utime_t mtime, char *buf);
 void       init_console_msg      (const char *wd);
 void       free_msgs_res         (MSGS *msgs);
 void       dequeue_messages      (JCR *jcr);
+void       dequeue_daemon_messages (JCR *jcr);
 void       set_db_engine_name    (const char *name);
 void       set_trace             (int trace_flag);
 bool       get_trace             (void);
index 2dafa645c28ca3eae6db493043b7204172d43693..4b9c0fc01b3f4440258430f1a100877309d589cc 100644 (file)
@@ -257,6 +257,7 @@ bail_out:
    generate_plugin_event(jcr, bsdEventJobEnd);
    flush_jobmedia_queue(jcr);
    dequeue_messages(jcr);             /* send any queued messages */
+   dequeue_daemon_messages(jcr);
    bs->signal(BNET_TERMINATE);
    free_plugins(jcr);                 /* release instantiated plugins */
    free_jcr(jcr);
index c8ad493f75d07a5414d2dff3b97be3bc525cf8f8..9569ee3066a810c8b776cfeef6bb31af449af452 100644 (file)
@@ -177,6 +177,7 @@ bail_out:
               edit_uint64(jcr->JobBytes, ec1), jcr->JobErrors, jcr->StatusErrMsg);
    Dmsg1(100, "==== %s", dir->msg);
    unbash_spaces(jcr->StatusErrMsg);
+   dequeue_daemon_messages(jcr);
    dir->signal(BNET_EOD);             /* send EOD to Director daemon */
    free_plugins(jcr);                 /* release instantiated plugins */
    garbage_collect_memory_pool();
index f43632ef528c87b7fdf3a70ab7dd44416ba1503e..0e313d1e7a9019bb15f6c9d969430ccf3360b429 100644 (file)
@@ -184,6 +184,7 @@ ok_out:
    dir->fsend(Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles,
       edit_uint64(jcr->JobBytes, ec1), jcr->JobErrors, jcr->StatusErrMsg);
    Dmsg6(100, Job_end, jcr->Job, jcr->JobStatus, jcr->JobFiles, ec1, jcr->JobErrors, jcr->StatusErrMsg);
+   dequeue_daemon_messages(jcr);
 
    dir->signal(BNET_EOD);             /* send EOD to Director daemon */
    free_plugins(jcr);                 /* release instantiated plugins */