]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb1_transaction.c
tdb2: Make TDB1 use the same tdb_hash() wrapper as TDB2
[ccan] / ccan / tdb2 / tdb1_transaction.c
index 8d25f96ab5efe98b070e4a1e61feba74dc2afa94..f0623025f95268f12a89febf9246475946e3fd8a 100644 (file)
@@ -478,8 +478,11 @@ static int _tdb1_transaction_start(struct tdb1_context *tdb)
        /* get a read lock from the freelist to the end of file. This
           is upgraded to a write lock during the commit */
        if (tdb1_allrecord_lock(tdb, F_RDLCK, TDB_LOCK_WAIT, true) == -1) {
-               tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
-                          "tdb1_transaction_start: failed to get hash locks");
+               if (errno != EAGAIN && errno != EINTR) {
+                       tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
+                                  "tdb1_transaction_start:"
+                                  " failed to get hash locks");
+               }
                goto fail_allrecord_lock;
        }
 
@@ -955,20 +958,22 @@ static int _tdb1_transaction_prepare_commit(struct tdb1_context *tdb)
 
        /* upgrade the main transaction lock region to a write lock */
        if (tdb1_allrecord_upgrade(tdb) == -1) {
-               tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
-                          "tdb1_transaction_prepare_commit:"
-                          " failed to upgrade hash locks");
-               _tdb1_transaction_cancel(tdb);
+               if (errno != EAGAIN && errno != EINTR) {
+                       tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
+                                  "tdb1_transaction_prepare_commit:"
+                                  " failed to upgrade hash locks");
+               }
                return -1;
        }
 
        /* get the open lock - this prevents new users attaching to the database
           during the commit */
        if (tdb1_nest_lock(tdb, TDB1_OPEN_LOCK, F_WRLCK, TDB_LOCK_WAIT) == -1) {
-               tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
-                          "tdb1_transaction_prepare_commit:"
-                          " failed to get open lock");
-               _tdb1_transaction_cancel(tdb);
+               if (errno != EAGAIN && errno != EINTR) {
+                       tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
+                                  "tdb1_transaction_prepare_commit:"
+                                  " failed to get open lock");
+               }
                return -1;
        }
 
@@ -978,7 +983,6 @@ static int _tdb1_transaction_prepare_commit(struct tdb1_context *tdb)
                        tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
                                   "tdb1_transaction_prepare_commit:"
                                   " failed to setup recovery data");
-                       _tdb1_transaction_cancel(tdb);
                        return -1;
                }
        }
@@ -993,7 +997,6 @@ static int _tdb1_transaction_prepare_commit(struct tdb1_context *tdb)
                        tdb_logerr(tdb, tdb->last_error, TDB_LOG_ERROR,
                                   "tdb1_transaction_prepare_commit:"
                                   " expansion failed");
-                       _tdb1_transaction_cancel(tdb);
                        return -1;
                }
                tdb->file->map_size = tdb->transaction->old_map_size;
@@ -1073,8 +1076,10 @@ int tdb1_transaction_commit(struct tdb1_context *tdb)
 
        if (!tdb->transaction->prepared) {
                int ret = _tdb1_transaction_prepare_commit(tdb);
-               if (ret)
+               if (ret) {
+                       _tdb1_transaction_cancel(tdb);
                        return ret;
+               }
        }
 
        methods = tdb->transaction->io_methods;