]> git.sur5r.net Git - bacula/bacula/commitdiff
Disallow Qmsg when despooling
authorKern Sibbald <kern@sibbald.com>
Fri, 23 Oct 2009 15:05:00 +0000 (17:05 +0200)
committerKern Sibbald <kern@sibbald.com>
Fri, 23 Oct 2009 15:05:00 +0000 (17:05 +0200)
bacula/src/jcr.h
bacula/src/lib/message.c

index 16a4d7d2d8e491e8eebf90f553212cd770b7fc65..58ae568437cd1424d67cdf68ee713f9b9ddf2be7 100644 (file)
@@ -214,6 +214,7 @@ public:
    JCR_free_HANDLER *daemon_free_jcr; /* Local free routine */
    dlist *msg_queue;                  /* Queued messages */
    pthread_mutex_t msg_queue_mutex;   /* message queue mutex */
+   bool dequeuing_msgs;               /* Set when dequeuing messages */
    alist job_end_push;                /* Job end pushed calls */
    POOLMEM *VolumeName;               /* Volume name desired -- pool_memory */
    POOLMEM *errmsg;                   /* edited error message */
index d9abff3bcc8c2a7d921416006a4088aecd9672db..6cb762d8747e203aa2a2744136c0b18c364480f7 100644 (file)
@@ -1361,6 +1361,13 @@ void Qmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...)
       /* jcr==NULL => daemon message, safe to send now */
       Jmsg(jcr, item->type, item->mtime, "%s", item->msg);
       free(item);
+   /*
+    * If we are dequeuing, we cannot queue another item,
+    * so as a last resort send it to the syslog 
+    */
+   } else if (jcr->dequeuing_msgs) {
+      syslog(LOG_DAEMON|LOG_ERR, "%s", item->msg);
+      free(item);
    } else {
       /* Queue message for later sending */
       P(jcr->msg_queue_mutex);
@@ -1380,11 +1387,13 @@ void dequeue_messages(JCR *jcr)
       return;
    }
    P(jcr->msg_queue_mutex);
+   jcr->dequeuing_msgs = true;
    foreach_dlist(item, jcr->msg_queue) {
       Jmsg(jcr, item->type, item->mtime, "%s", item->msg);
    }
    /* Remove messages just sent */
    jcr->msg_queue->destroy();
+   jcr->dequeuing_msgs = false;
    V(jcr->msg_queue_mutex);
 }