summaryrefslogtreecommitdiffstats
path: root/common/storage_lmdb.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-29 15:19:21 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-05-29 15:19:21 +0200
commitdabd408dcd372f16c7934597db30346869cd8ad8 (patch)
tree0d6513204b7fa6e34cf50733ad0472866ea05e2a /common/storage_lmdb.cpp
parentb441386c4e138d19bbd79d578e0a2ff1b3f54a93 (diff)
downloadsink-dabd408dcd372f16c7934597db30346869cd8ad8.tar.gz
sink-dabd408dcd372f16c7934597db30346869cd8ad8.zip
Fixed genericresource so it works with the maildirresourcetest
Diffstat (limited to 'common/storage_lmdb.cpp')
-rw-r--r--common/storage_lmdb.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp
index 4ed9525..cc8b28d 100644
--- a/common/storage_lmdb.cpp
+++ b/common/storage_lmdb.cpp
@@ -347,7 +347,7 @@ class Storage::Transaction::Private
347{ 347{
348public: 348public:
349 Private(bool _requestRead, const std::function<void(const Storage::Error &error)> &_defaultErrorHandler, const QString &_name, MDB_env *_env) 349 Private(bool _requestRead, const std::function<void(const Storage::Error &error)> &_defaultErrorHandler, const QString &_name, MDB_env *_env)
350 : env(_env), requestedRead(_requestRead), defaultErrorHandler(_defaultErrorHandler), name(_name), implicitCommit(false), error(false), modificationCounter(0) 350 : env(_env), transaction(nullptr), requestedRead(_requestRead), defaultErrorHandler(_defaultErrorHandler), name(_name), implicitCommit(false), error(false), modificationCounter(0)
351 { 351 {
352 } 352 }
353 ~Private() 353 ~Private()
@@ -366,8 +366,15 @@ public:
366 366
367 void startTransaction() 367 void startTransaction()
368 { 368 {
369 // qDebug() << "Opening transaction " << requestedRead; 369 Q_ASSERT(!transaction);
370 // auto f = [](const char *msg, void *ctx) -> int {
371 // qDebug() << msg;
372 // return 0;
373 // };
374 // mdb_reader_list(env, f, nullptr);
375 // Trace_area("storage." + name.toLatin1()) << "Opening transaction " << requestedRead;
370 const int rc = mdb_txn_begin(env, NULL, requestedRead ? MDB_RDONLY : 0, &transaction); 376 const int rc = mdb_txn_begin(env, NULL, requestedRead ? MDB_RDONLY : 0, &transaction);
377 // Trace_area("storage." + name.toLatin1()) << "Started transaction " << mdb_txn_id(transaction) << transaction;
371 if (rc) { 378 if (rc) {
372 defaultErrorHandler(Error(name.toLatin1(), ErrorCodes::GenericError, "Error while opening transaction: " + QByteArray(mdb_strerror(rc)))); 379 defaultErrorHandler(Error(name.toLatin1(), ErrorCodes::GenericError, "Error while opening transaction: " + QByteArray(mdb_strerror(rc))));
373 } 380 }
@@ -387,22 +394,27 @@ Storage::Transaction::~Transaction()
387{ 394{
388 if (d && d->transaction) { 395 if (d && d->transaction) {
389 if (d->implicitCommit && !d->error) { 396 if (d->implicitCommit && !d->error) {
390 // qDebug() << "implicit commit";
391 commit(); 397 commit();
392 } else { 398 } else {
393 // qDebug() << "Aorting transaction"; 399 // Trace_area("storage." + d->name.toLatin1()) << "Aborting transaction" << mdb_txn_id(d->transaction) << d->transaction;
394 mdb_txn_abort(d->transaction); 400 mdb_txn_abort(d->transaction);
395 } 401 }
396 } 402 }
397 delete d; 403 delete d;
398} 404}
399 405
406Storage::Transaction::operator bool() const
407{
408 return (d && d->transaction);
409}
410
400bool Storage::Transaction::commit(const std::function<void(const Storage::Error &error)> &errorHandler) 411bool Storage::Transaction::commit(const std::function<void(const Storage::Error &error)> &errorHandler)
401{ 412{
402 if (!d || !d->transaction) { 413 if (!d || !d->transaction) {
403 return false; 414 return false;
404 } 415 }
405 416
417 // Trace_area("storage." + d->name.toLatin1()) << "Committing transaction" << mdb_txn_id(d->transaction) << d->transaction;
406 const int rc = mdb_txn_commit(d->transaction); 418 const int rc = mdb_txn_commit(d->transaction);
407 if (rc) { 419 if (rc) {
408 mdb_txn_abort(d->transaction); 420 mdb_txn_abort(d->transaction);
@@ -420,6 +432,7 @@ void Storage::Transaction::abort()
420 return; 432 return;
421 } 433 }
422 434
435 // Trace_area("storage." + d->name.toLatin1()) << "Aborting transaction" << mdb_txn_id(d->transaction) << d->transaction;
423 mdb_txn_abort(d->transaction); 436 mdb_txn_abort(d->transaction);
424 d->transaction = nullptr; 437 d->transaction = nullptr;
425} 438}