diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-05-29 15:19:21 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-05-29 15:19:21 +0200 |
commit | dabd408dcd372f16c7934597db30346869cd8ad8 (patch) | |
tree | 0d6513204b7fa6e34cf50733ad0472866ea05e2a /common/storage_lmdb.cpp | |
parent | b441386c4e138d19bbd79d578e0a2ff1b3f54a93 (diff) | |
download | sink-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.cpp | 21 |
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 | { |
348 | public: | 348 | public: |
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 | ||
406 | Storage::Transaction::operator bool() const | ||
407 | { | ||
408 | return (d && d->transaction); | ||
409 | } | ||
410 | |||
400 | bool Storage::Transaction::commit(const std::function<void(const Storage::Error &error)> &errorHandler) | 411 | bool 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 | } |