]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/cache: fix locking around cache preallocation
authorLukáš Ježek <lukas.jezek@nic.cz>
Thu, 25 Jun 2020 08:30:23 +0000 (10:30 +0200)
committerLukáš Ježek <lukas.jezek@nic.cz>
Thu, 25 Jun 2020 11:16:28 +0000 (13:16 +0200)
lib/cache/cdb_lmdb.c

index 35292fcbe5f43c5c763c3caf0be832792d52cbe4..d009f1d1bc15ccf46f5c9f6f52d52818f680e7bf 100644 (file)
@@ -323,13 +323,13 @@ static int cdb_open(struct lmdb_env *env, const char *path, size_t mapsize,
        }
 
 #if !defined(__MACOSX__) && !(defined(__APPLE__) && defined(__MACH__))
-       auto_free char *mdb_datafile = kr_strcatdup(2, path, "/data.mdb");
-       int fd = open(mdb_datafile, O_RDWR);
-       if (fd == -1) {
+       mdb_filehandle_t fd = -1;
+       ret = mdb_env_get_fd(env->env, &fd);
+       if (ret != MDB_SUCCESS) {
                mdb_txn_abort(txn);
                stats->close++;
                mdb_env_close(env->env);
-               return kr_error(errno);
+               return lmdb_error(ret);
        }
 
        ret = posix_fallocate(fd, 0, mapsize);
@@ -342,10 +342,8 @@ static int cdb_open(struct lmdb_env *env, const char *path, size_t mapsize,
                mdb_txn_abort(txn);
                stats->close++;
                mdb_env_close(env->env);
-               close(fd);
                return kr_error(ret);
        }
-       close(fd);
 #endif
 
        stats->commit++;