From 70bb707903da21103b84e0f3effcaa0a24612d5c Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Thu, 15 Jan 2015 00:53:54 +0100 Subject: Fixed messagequeue --- common/messagequeue.cpp | 10 ++++++++-- common/messagequeue.h | 8 +++++++- common/storage_lmdb.cpp | 6 ++++-- 3 files changed, 19 insertions(+), 5 deletions(-) (limited to 'common') diff --git a/common/messagequeue.cpp b/common/messagequeue.cpp index cf63e57..e1bde4b 100644 --- a/common/messagequeue.cpp +++ b/common/messagequeue.cpp @@ -15,12 +15,13 @@ void MessageQueue::enqueue(void const *msg, size_t size) mStorage.write(key.data(), key.size(), msg, size); mStorage.setMaxRevision(revision); mStorage.commitTransaction(); + emit messageReady(); } void MessageQueue::dequeue(const std::function)> &resultHandler, const std::function &errorHandler) { - mStorage.scan("", [this, resultHandler](void *keyPtr, int keySize, void *valuePtr, int valueSize) -> bool { + mStorage.scan("", 0, [this, resultHandler](void *keyPtr, int keySize, void *valuePtr, int valueSize) -> bool { const std::string key(static_cast(keyPtr), keySize); resultHandler(valuePtr, valueSize, [this, key](bool success) { if (success) { @@ -30,7 +31,12 @@ void MessageQueue::dequeue(const std::function #include #include #include @@ -8,7 +9,9 @@ /** * A persistent FIFO message queue. */ -class MessageQueue { +class MessageQueue : public QObject +{ + Q_OBJECT public: class Error { @@ -29,6 +32,9 @@ public: void dequeue(const std::function)> & resultHandler, const std::function &errorHandler); bool isEmpty(); +signals: + void messageReady(); + private: Akonadi2::Storage mStorage; }; diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index f0a5bc0..ae2be23 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp @@ -308,17 +308,19 @@ void Storage::scan(const char *keyData, uint keySize, } if (!keyData || keySize == 0) { + bool gotResult = false; if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_FIRST)) == 0 && resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { while ((rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) == 0) { + gotResult = true; if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { break; } } } - //We never find the last value - if (rc == MDB_NOTFOUND) { + //We never find the last value, but ensure we got at least one. + if (gotResult && rc == MDB_NOTFOUND) { rc = 0; } } else { -- cgit v1.2.3