Rework getting database version (#469)

It seems we don't get the correct database version in some case with
some compilers, optimization flags. Suspecting some stale ->c_str().
This commit is contained in:
djcb 2014-09-23 07:32:39 +03:00
parent 7888ba38f0
commit 3c7061338d
3 changed files with 17 additions and 17 deletions

View File

@ -102,7 +102,7 @@ public:
void init (const char *path, const char *contacts_path,
bool rebuild, bool read_only) {
_my_addresses = NULL;
_batch_size = DEFAULT_BATCH_SIZE;
_contacts = 0;
@ -111,6 +111,7 @@ public:
_processed = 0;
_read_only = read_only;
_ref_count = 1;
_version = NULL;
}
void set_my_addresses (const char **my_addresses) {
@ -128,18 +129,17 @@ public:
}
void check_set_version () {
/* check version...*/
gchar *version;
version = mu_store_get_metadata (this, MU_STORE_VERSION_KEY, NULL);
if (!version)
if (_version)
return;
_version = mu_store_get_metadata (this, MU_STORE_VERSION_KEY, NULL);
if (!_version) {
mu_store_set_metadata (this, MU_STORE_VERSION_KEY,
MU_STORE_SCHEMA_VERSION, NULL);
else if (g_strcmp0 (version, MU_STORE_SCHEMA_VERSION) != 0) {
g_free (version);
_version = mu_store_get_metadata (this, MU_STORE_VERSION_KEY, NULL);
} else if (g_strcmp0 (_version, MU_STORE_SCHEMA_VERSION) != 0)
throw MuStoreError (MU_ERROR_XAPIAN_VERSION_MISMATCH,
"the database needs a rebuild");
} else
g_free (version);
}
~_MuStore () {
@ -151,6 +151,7 @@ public:
if (!_read_only)
mu_store_flush (this);
g_free (_version);
mu_str_free_list (_my_addresses);
MU_WRITE_LOG ("closing xapian database with %d document(s)",
@ -180,14 +181,14 @@ public:
MuContacts* contacts() { return _contacts; }
const std::string version () const {
char *v = mu_store_get_metadata (this, MU_STORE_VERSION_KEY, NULL);
_version = v;
g_free (v);
const char *version () const {
if (!_version)
_version = mu_store_get_metadata (this, MU_STORE_VERSION_KEY, NULL);
return _version;
}
void set_version (const char *version) {
g_clear_pointer (&_version, g_free);
mu_store_set_metadata (this, MU_STORE_VERSION_KEY, version, NULL);
}
@ -245,7 +246,7 @@ private:
MuContacts *_contacts;
std::string _path;
mutable std::string _version;
mutable char *_version;
Xapian::Database *_db;
bool _read_only;

View File

@ -113,7 +113,8 @@ const char*
mu_store_version (const MuStore *store)
{
g_return_val_if_fail (store, NULL);
return store->version().c_str();
return store->version();
}

View File

@ -98,8 +98,6 @@ mu_store_database_version (const gchar *xpath)
}
gboolean
mu_store_database_is_locked (const gchar *xpath)
{