X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=etc%2Fcnid_dbd%2Fcmd_dbd_scanvol.c;h=a91f43716dd196c8a11ba56c8678c501dd8f2c97;hb=3858412d6efa2798fdc9b3f5613275e49dd63513;hp=49938af36e8a7e6e04d9b6700b92a718fcb64c71;hpb=bee44bcbf6b614d7e737602f27a41d041d8efee7;p=netatalk.git diff --git a/etc/cnid_dbd/cmd_dbd_scanvol.c b/etc/cnid_dbd/cmd_dbd_scanvol.c index 49938af3..a91f4371 100644 --- a/etc/cnid_dbd/cmd_dbd_scanvol.c +++ b/etc/cnid_dbd/cmd_dbd_scanvol.c @@ -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)) @@ -1207,15 +1212,16 @@ int cmd_dbd_scanvol(DBD *dbd_ref, struct volinfo *vi, dbd_flags_t flags) return -1; } - /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */ - if (! nocniddb && !(flags & DBD_FLAGS_FORCE)) { - /* Get volume stamp */ - dbd_getstamp(dbd, &rqst, &rply); - if (rply.result != CNID_DBD_RES_OK) - goto exit; - memcpy(stamp, rply.name, CNID_DEV_LEN); + /* Get volume stamp */ + dbd_getstamp(dbd, &rqst, &rply); + if (rply.result != CNID_DBD_RES_OK) { + ret = -1; + goto exit; + } + memcpy(stamp, rply.name, CNID_DEV_LEN); - /* open/create rebuild dbd, copy rootinfo key */ + /* temporary rebuild db, used with -re rebuild to delete unused CNIDs, not used with -f */ + if (! nocniddb && (flags & DBD_FLAGS_EXCL) && !(flags & DBD_FLAGS_FORCE)) { tmpdb_path = get_tmpdb_path(); if (NULL == (dbd_rebuild = dbif_init(tmpdb_path, "cnid2.db"))) { ret = -1; @@ -1253,10 +1259,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