]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/tdb.c
tdb2: rework transaction.c internal functions to return enum TDB_ERROR.
[ccan] / ccan / tdb2 / tdb.c
index 2b0b77ad43726fe48b614d2f842dcdcbe6c18869..600d6b765d7bbb7f84d9a4d6f7a374c5a2fadb9c 100644 (file)
@@ -177,6 +177,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
        ssize_t rlen;
        struct tdb_header hdr;
        struct tdb_attribute_seed *seed = NULL;
+       tdb_bool_err berr;
        enum TDB_ERROR ecode;
 
        tdb = malloc(sizeof(*tdb));
@@ -350,7 +351,12 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
        tdb->methods->oob(tdb, tdb->map_size + 1, true);
 
        /* Now it's fully formed, recover if necessary. */
-       if (tdb_needs_recovery(tdb)) {
+       berr = tdb_needs_recovery(tdb);
+       if (unlikely(berr != false)) {
+               if (berr < 0) {
+                       ecode = berr;
+                       goto fail;
+               }
                ecode = tdb_lock_and_recover(tdb);
                if (ecode != TDB_SUCCESS) {
                        tdb->ecode = ecode;