From: Kern Sibbald Date: Thu, 19 Jul 2018 18:34:30 +0000 (+0200) Subject: Separate dequeuing msgs and dequeuing daemon msgs X-Git-Tag: Release-9.2.0~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80b580cea50a0196795ee70e440f3106ecff88eb;p=thirdparty%2Fbacula.git Separate dequeuing msgs and dequeuing daemon msgs --- diff --git a/bacula/src/dird/job.c b/bacula/src/dird/job.c index f6a0cb729..4278f4b09 100644 --- a/bacula/src/dird/job.c +++ b/bacula/src/dird/job.c @@ -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; } diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 2c9ebedd2..c42bd2e9b 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -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); diff --git a/bacula/src/lib/jcr.c b/bacula/src/lib/jcr.c index 8aafd522d..a1ca4467c 100644 --- a/bacula/src/lib/jcr.c +++ b/bacula/src/lib/jcr.c @@ -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 */ diff --git a/bacula/src/lib/message.c b/bacula/src/lib/message.c index 3b7315177..6b553c027 100644 --- a/bacula/src/lib/message.c +++ b/bacula/src/lib/message.c @@ -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) { diff --git a/bacula/src/lib/protos.h b/bacula/src/lib/protos.h index 93519da95..e9730a6b0 100644 --- a/bacula/src/lib/protos.h +++ b/bacula/src/lib/protos.h @@ -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); diff --git a/bacula/src/stored/dircmd.c b/bacula/src/stored/dircmd.c index 2dafa645c..4b9c0fc01 100644 --- a/bacula/src/stored/dircmd.c +++ b/bacula/src/stored/dircmd.c @@ -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); diff --git a/bacula/src/stored/fd_cmds.c b/bacula/src/stored/fd_cmds.c index c8ad493f7..9569ee306 100644 --- a/bacula/src/stored/fd_cmds.c +++ b/bacula/src/stored/fd_cmds.c @@ -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(); diff --git a/bacula/src/stored/vbackup.c b/bacula/src/stored/vbackup.c index f43632ef5..0e313d1e7 100644 --- a/bacula/src/stored/vbackup.c +++ b/bacula/src/stored/vbackup.c @@ -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 */