* @param[in] env_directory Path to environment directory * @return A shared pointer to the BerkeleyEnvironment object for the wallet directory, never empty because ~BerkeleyEnvironment * erases the weak pointer from the g_dbenvs map. * @post A new BerkeleyEnvironment weak pointer is inserted into g_dbenvs if the directory path key was not already in the map. */
| 61 | * @post A new BerkeleyEnvironment weak pointer is inserted into g_dbenvs if the directory path key was not already in the map. |
| 62 | */ |
| 63 | std::shared_ptr<BerkeleyEnvironment> GetBerkeleyEnv(const fs::path& env_directory) |
| 64 | { |
| 65 | LOCK(cs_db); |
| 66 | auto inserted = g_dbenvs.emplace(fs::PathToString(env_directory), std::weak_ptr<BerkeleyEnvironment>()); |
| 67 | if (inserted.second) { |
| 68 | auto env = std::make_shared<BerkeleyEnvironment>(env_directory); |
| 69 | inserted.first->second = env; |
| 70 | return env; |
| 71 | } |
| 72 | return inserted.first->second.lock(); |
| 73 | } |
| 74 | |
| 75 | // |
| 76 | // BerkeleyBatch |