From 0dc4280b68101c1ad1add59c13471f94ac43e8f4 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Tue, 2 Jun 2026 12:31:56 +0300 Subject: [PATCH] lmdb: fix put database creation at separate block to avoid lifetime issues when returning an error on migration --- store/src/lmdb.rs | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/store/src/lmdb.rs b/store/src/lmdb.rs index 7496564e..b31844c3 100644 --- a/store/src/lmdb.rs +++ b/store/src/lmdb.rs @@ -228,25 +228,28 @@ impl Store { } // Database setup. - let r_env_map = env_map.read(); - let env = r_env_map.get(&full_path).unwrap().env.clone(); - let mut write = env.write_txn()?; - let def_name = db_name.unwrap_or(DEFAULT_ENV_NAME); - let def_db = env.create_database(&mut write, Some(def_name))?; - let mut dbs_map = HashMap::>::new(); - for p in prefixes { - let db = env.create_database(&mut write, Some(p.to_string().as_str()))?; - dbs_map.insert(p, db); - } - write.commit()?; + let s = { + let r_env_map = env_map.read(); + let env = r_env_map.get(&full_path).unwrap().env.clone(); + let mut write = env.write_txn()?; + let def_name = db_name.unwrap_or(DEFAULT_ENV_NAME); + let def_db = env.create_database(&mut write, Some(def_name))?; + let mut dbs_map = HashMap::>::new(); + for p in prefixes { + let db = env.create_database(&mut write, Some(p.to_string().as_str()))?; + dbs_map.insert(p, db); + } + write.commit()?; - let s = Store { - env: env.clone(), - env_path: full_path.clone(), - pre_dbs: Arc::new(dbs_map), - def_db, - version: DEFAULT_DB_VERSION, - alloc_chunk_size, + let s = Store { + env: env.clone(), + env_path: full_path.clone(), + pre_dbs: Arc::new(dbs_map), + def_db, + version: DEFAULT_DB_VERSION, + alloc_chunk_size, + }; + s }; // Migrate to default environment if needed.