]> arthur.barton.de Git - netatalk.git/commitdiff
Don't wait five second after the first error when speaking to the dbd backend, from...
authordidg <didg>
Wed, 6 Jun 2007 10:13:17 +0000 (10:13 +0000)
committerdidg <didg>
Wed, 6 Jun 2007 10:13:17 +0000 (10:13 +0000)
libatalk/cnid/dbd/cnid_dbd.c

index deee39ead2e51f0ec525dede5995e260ac688db0..9d042abf6f6cedbdcbed9174fb6a83ffc0c6f22c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_dbd.c,v 1.1.4.18.2.3 2005-09-27 10:40:41 didg Exp $
+ * $Id: cnid_dbd.c,v 1.1.4.18.2.4 2007-06-06 10:13:17 didg Exp $
  *
  * Copyright (C) Joerg Lenneis 2003
  * All Rights Reserved.  See COPYING.
@@ -284,6 +284,7 @@ static int transmit(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_db
     struct timeval tv;
     time_t orig, t;
     int silent = 1;
+    int clean = 1; /* no errors so far - to prevent sleep on first try */
     
     if (db->changed) {
         /* volume and db don't have the same timestamp
@@ -330,6 +331,7 @@ transmit_fail:
                        will log messages if something goes wrong again */
         if (db->fd != -1) {
             close(db->fd);
+            db->fd = -1; /* FD not valid... will need to reconnect */
         }
         time(&t);
         if (t - orig > MAX_DELAY) {
@@ -337,11 +339,14 @@ transmit_fail:
             return -1;
        }
 
-        /* sleep a little before retry */
-        db->fd = -1;
-        tv.tv_usec = 0;
-        tv.tv_sec  = 5;
-        select(0, NULL, NULL, NULL, &tv);
+       if (!clean) { /* don't sleep if just got disconnected by cnid server */
+            /* sleep a little before retry */
+            tv.tv_usec = 0;
+            tv.tv_sec  = 5;
+            select(0, NULL, NULL, NULL, &tv); /* sleep for 5 seconds */
+       } else {
+            clean = 0; /* false... next time sleep */
+        }
     }
     return -1;
 }