# # # patch "database.cc" # from [85a2d2022abadbdafb81e67fc87e46d1f05faba5] # to [0b4996448c9a11e065702c2ca6b9f450286029fb] # # patch "monotone.cc" # from [ac30d742adb437d3f60283f23d06fc20364ea3d3] # to [5b546005ec1946d8fcfbf37bda5ff87b4ebabf4f] # ============================================================ --- database.cc 85a2d2022abadbdafb81e67fc87e46d1f05faba5 +++ database.cc 0b4996448c9a11e065702c2ca6b9f450286029fb @@ -569,18 +569,19 @@ database::init() void database::init() { - boost::shared_ptr i = dbcache[opts.dbname]; - if (!i) + system_path dbpath = opts.dbname; + if (opts.dbname_type == managed_db) + resolve_db_alias(lua, opts.dbname_alias, dbpath); + + if (dbcache.find(dbpath) == dbcache.end()) { - system_path dbpath = opts.dbname; - if (opts.dbname_type == managed_db) - resolve_db_alias(lua, opts.dbname_alias, dbpath); - - i.reset(new database_impl(dbpath, opts.dbname_type, - opts.roster_cache_performance_log)); + L(FL("creating new database_impl instance for %s") % dbpath); + dbcache.insert(make_pair(dbpath, boost::shared_ptr( + new database_impl(dbpath, opts.dbname_type, opts.roster_cache_performance_log) + ))); } - imp = i; + imp = dbcache[dbpath]; } database::~database() ============================================================ --- monotone.cc ac30d742adb437d3f60283f23d06fc20364ea3d3 +++ monotone.cc 5b546005ec1946d8fcfbf37bda5ff87b4ebabf4f @@ -19,6 +19,7 @@ #include #include "app_state.hh" +#include "database.hh" #include "botan_pipe_cache.hh" #include "commands.hh" #include "sanity.hh" @@ -160,6 +161,12 @@ cpp_main(int argc, char ** argv) unfiltered_pipe = new Botan::Pipe; new (unfiltered_pipe_cleanup_mem) cached_botan_pipe(unfiltered_pipe); + class _DbCacheEmptier { + public: + _DbCacheEmptier() { } + ~_DbCacheEmptier() { database::reset_cache(); } + } db_cache_emptier; + // Record where we are. This has to happen before any use of // paths.hh objects. save_initial_path();