]> git.sur5r.net Git - bacula/bacula/commitdiff
Convert all Jmsg on the watchdog thread to Qmsg
authorEric Bollengier <eric@eb.homelinux.org>
Fri, 28 May 2010 11:37:58 +0000 (13:37 +0200)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Aug 2010 14:53:51 +0000 (16:53 +0200)
bacula/src/lib/message.c
bacula/src/lib/protos.h
bacula/src/lib/watchdog.c

index 638c4c259abbde3249d07695b958157fded9d01c..def39b8d85734d54904855dbf85c0268053db9bc 100644 (file)
@@ -1218,11 +1218,24 @@ Jmsg(JCR *jcr, int type, utime_t mtime, const char *fmt,...)
        return;
     }
 
+    /* The watchdog thread can't use Jmsg directly, we always queued it */
+    if (is_watchdog()) {
+       va_start(arg_ptr, fmt);
+       bvsnprintf(rbuf+len,  sizeof(rbuf)-len, fmt, arg_ptr);
+       va_end(arg_ptr);
+       Qmsg(jcr, type, mtime, "%s", rbuf);
+       return;
+    }
+
     msgs = NULL;
     if (!jcr) {
        jcr = get_jcr_from_tsd();
     }
     if (jcr) {
+       if (!jcr->dequeuing_msgs) { /* Avoid recursion */
+          /* Dequeue messages to keep the original order  */
+          dequeue_messages(jcr); 
+       }
        msgs = jcr->jcr_msgs;
        JobId = jcr->JobId;
     }
index 701d98e2c0a2bcc1e4c52a07488fc34d42ef281b..450a70ad8ba7791109f3adb3c38f6bd13c3853c0 100644 (file)
@@ -341,6 +341,7 @@ int stop_watchdog(void);
 watchdog_t *new_watchdog(void);
 bool register_watchdog(watchdog_t *wd);
 bool unregister_watchdog(watchdog_t *wd);
+bool is_watchdog();
 
 /* timers.c */
 btimer_t *start_child_timer(JCR *jcr, pid_t pid, uint32_t wait);
index 770597dbbac3729f98a1c40dc170365a6f896213..3c70ffc783f99232036d191b5c9dc426570601c6 100644 (file)
@@ -60,6 +60,19 @@ static pthread_t wd_tid;
 static dlist *wd_queue;
 static dlist *wd_inactive;
 
+/* 
+ * Returns: 0 if the current thread is NOT the watchdog
+ *          1 if the current thread is the watchdog
+ */
+bool is_watchdog()
+{
+   if (wd_is_init && pthread_equal(pthread_self(), wd_tid)) {
+      return true;
+   } else {
+      return false;
+   }
+}
+
 /*
  * Start watchdog thread
  *