]> arthur.barton.de Git - netatalk.git/blobdiff - etc/cnid_dbd/cmd_dbd_scanvol.c
Merge 2-1
[netatalk.git] / etc / cnid_dbd / cmd_dbd_scanvol.c
index 49938af36e8a7e6e04d9b6700b92a718fcb64c71..b0af191c26d32345051ddc562a9a17201e1807df 100644 (file)
@@ -862,6 +862,11 @@ static int dbd_readdir(int volroot, cnid_t did)
     struct dirent *ep;
     static struct stat st;      /* Save some stack space */
 
+    /* keep trying to get the lock */
+    if (!db_locked)
+        if ((db_locked = get_lock(1, NULL)) == -1)
+            return -1;
+
     /* Check again for .AppleDouble folder, check_adfile also checks/creates it */
     if ((addir_ok = check_addir(volroot)) != 0)
         if ( ! (dbd_flags & DBD_FLAGS_SCAN))
@@ -1208,7 +1213,7 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags)
     }
 
     /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */
-    if (! nocniddb && !(flags & DBD_FLAGS_FORCE)) {
+    if (! nocniddb && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) {
         /* Get volume stamp */
         dbd_getstamp(dbd, &rqst, &rply);
         if (rply.result != CNID_DBD_RES_OK)
@@ -1253,10 +1258,10 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags)
 
 exit:
     if (! nocniddb) {
-        if (dbif_txn_close(dbd, 2) != 0)
+        if (dbif_txn_close(dbd, ret == 0 ? 1 : 0) != 0)
             ret = -1;
         if (dbd_rebuild)
-            if (dbif_txn_close(dbd_rebuild, 2) != 0)
+            if (dbif_txn_close(dbd_rebuild, ret == 0 ? 1 : 0) != 0)
                 ret = -1;
         if ((ret == 0) && dbd_rebuild && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE))
             /* We can only do this in exclusive mode, otherwise we might delete CNIDs added from