]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/filed/heartbeat.c
Added wx-console.exe and .conf.
[bacula/bacula] / bacula / src / filed / heartbeat.c
index 05bd90229bd4dc4d110a6c147d28f9a6e7954a21..8e1c033d22ccee69ef689bdb2fa26f2157493afc 100644 (file)
@@ -31,7 +31,7 @@
 #include "bacula.h"
 #include "filed.h"
 
-#ifdef HAVE_CYGWIN
+#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
 /* pthread_kill() dies on Cygwin, so disable it */
 #define pthread_kill(x, y)
 /* Use shorter wait interval on Cygwin because no kill */
@@ -63,8 +63,9 @@ static void *sd_heartbeat_thread(void *arg)
    jcr->hb_bsock = sd;
 
    /* Hang reading the socket to the SD, and every time we get
-    *  a heartbeat, we simply send it on to the Director to
-    *  keep him alive.
+    *  a heartbeat or we get a wait timeout (1 minute), we
+    *  check to see if we need to send a heartbeat to the
+    *  Directory.
     */
    for ( ; !is_bnet_stop(sd); ) {
       n = bnet_wait_data_intr(sd, WAIT_INTERVAL);
@@ -96,15 +97,19 @@ void start_heartbeat_monitor(JCR *jcr)
 /* Terminate the heartbeat thread. Used for both SD and DIR */
 void stop_heartbeat_monitor(JCR *jcr) 
 {
-   /* Wait for heartbeat thread to start */
-   while (jcr->hb_bsock == NULL) {
+   int cnt = 0;
+   /* Wait max 10 secs for heartbeat thread to start */
+   while (jcr->hb_bsock == NULL && cnt++ < 200) {
       bmicrosleep(0, 50);            /* avoid race */
    }
-   jcr->hb_bsock->timed_out = 1;      /* set timed_out to terminate read */
-   jcr->hb_bsock->terminated = 1;     /* set to terminate read */
 
-   /* Wait for heartbeat thread to stop */
-   while (jcr->hb_bsock) {
+   if (jcr->hb_bsock) {
+      jcr->hb_bsock->timed_out = 1;   /* set timed_out to terminate read */
+      jcr->hb_bsock->terminated = 1;  /* set to terminate read */
+   }
+   cnt = 0;
+   /* Wait max 100 secs for heartbeat thread to stop */
+   while (jcr->hb_bsock && cnt++ < 200) {
       /* Naturally, Cygwin 1.3.20 craps out on the following */
       pthread_kill(jcr->heartbeat_id, TIMEOUT_SIGNAL); /* make heartbeat thread go away */
       bmicrosleep(0, 500);