From cb8364c2554029287f8e3cd7bb7520c63e17845c Mon Sep 17 00:00:00 2001 From: Ari Lazier Date: Wed, 12 Aug 2015 11:07:06 -0700 Subject: [PATCH] property copy schema from cached realms --- shared_realm.cpp | 22 +++++++++------------- shared_realm.hpp | 1 - 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/shared_realm.cpp b/shared_realm.cpp index bd489b0f..10c09f6c 100644 --- a/shared_realm.cpp +++ b/shared_realm.cpp @@ -65,11 +65,6 @@ Realm::Realm(Config &config) : m_config(config), m_thread_id(std::this_thread::g } } -Realm::~Realm() -{ - s_global_cache.remove(m_config.path, m_thread_id); -} - Group *Realm::read_group() { if (!m_group) { @@ -110,7 +105,12 @@ SharedRealm Realm::get_shared_realm(Config &config) std::lock_guard lock(s_init_mutex); uint64_t old_version = ObjectStore::get_schema_version(realm->read_group()); - if (!realm->m_config.schema) { + if (auto existing = s_global_cache.get_any_realm(realm->config().path)) { + // if there is an existing realm at the current path steal its schema/column mapping + // FIXME - need to validate that schemas match + realm->m_config.schema = std::make_unique(*existing->m_config.schema); + } + else if (!realm->m_config.schema) { // get schema from group and skip validation realm->m_config.schema_version = old_version; realm->m_config.schema = std::make_unique(ObjectStore::schema_from_group(realm->read_group())); @@ -121,11 +121,6 @@ SharedRealm Realm::get_shared_realm(Config &config) } ObjectStore::verify_schema(realm->read_group(), *realm->m_config.schema, true); } - else if(auto existing = s_global_cache.get_any_realm(realm->config().path)) { - // if there is an existing realm at the current path steal its schema/column mapping - // FIXME - need to validate that schemas match - realm->m_config.schema = std::make_unique(*existing->m_config.schema); - } else { // its a non-cached realm so update/migrate if needed realm->update_schema(*realm->m_config.schema, realm->m_config.schema_version); @@ -357,11 +352,12 @@ SharedRealm RealmCache::get_any_realm(const std::string &path) return SharedRealm(); } - for (auto thread_iter = path_iter->second.begin(); thread_iter != path_iter->second.end(); thread_iter++) { + auto thread_iter = path_iter->second.begin(); + while (thread_iter != path_iter->second.end()) { if (auto realm = thread_iter->second.lock()) { return realm; } - path_iter->second.erase(thread_iter); + path_iter->second.erase(thread_iter++); } return SharedRealm(); diff --git a/shared_realm.hpp b/shared_realm.hpp index 2807549d..e2640386 100644 --- a/shared_realm.hpp +++ b/shared_realm.hpp @@ -120,7 +120,6 @@ namespace realm { static RealmCache s_global_cache; public: - ~Realm(); ExternalNotificationFunction m_external_notifier; // FIXME private