aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksi Lindeman <dec05eba@protonmail.com>2018-11-01 07:15:28 +0100
committerAleksi Lindeman <dec05eba@protonmail.com>2018-11-01 07:15:28 +0100
commit88149764207c7719b6a979c5eb4dea3269bdd3e5 (patch)
tree94a92edbdbc6c502d7ec0755f7f6a0555ee93800
parente2eb4f72050a297668850deed91cc88860b6ad45 (diff)
Make operation callback funcs synchronous
-rw-r--r--include/odhtdb/DatabaseStorage.hpp2
-rw-r--r--src/DatabaseStorage.cpp10
2 files changed, 12 insertions, 0 deletions
diff --git a/include/odhtdb/DatabaseStorage.hpp b/include/odhtdb/DatabaseStorage.hpp
index b0c081e..8d559cd 100644
--- a/include/odhtdb/DatabaseStorage.hpp
+++ b/include/odhtdb/DatabaseStorage.hpp
@@ -19,6 +19,7 @@
#include <sibs/SafeDeserializer.hpp>
#include <functional>
#include <sibs/DirectConnection.hpp>
+#include <mutex>
class sqlite3;
class sqlite3_stmt;
@@ -201,5 +202,6 @@ namespace odhtdb
u8 passwordSalt[PASSWORD_SALT_LEN];
std::vector<std::shared_ptr<sibs::DirectConnectionPeer>> remotePeers;
+ std::recursive_mutex databaseOperationCallbackMutex;
};
}
diff --git a/src/DatabaseStorage.cpp b/src/DatabaseStorage.cpp
index 34dd09a..9611993 100644
--- a/src/DatabaseStorage.cpp
+++ b/src/DatabaseStorage.cpp
@@ -213,6 +213,7 @@ namespace odhtdb
void DatabaseStorage::loadNode(const Hash &nodeHash, DatabaseLoadOrder loadOrder)
{
+ std::lock_guard<std::recursive_mutex> lock(databaseOperationCallbackMutex);
string orderByString;
if(loadOrder == DatabaseLoadOrder::OLDEST_FIRST)
orderByString = " ORDER BY timestamp ASC";
@@ -1053,7 +1054,10 @@ namespace odhtdb
{
const DatabaseCreateNodeRequest createNodeRequest(&nodeHash, timestamp, creatorPublicKey, adminGroupId, database);
if(database->onCreateNodeCallbackFunc)
+ {
+ std::lock_guard<std::recursive_mutex> lock(databaseOperationCallbackMutex);
database->onCreateNodeCallbackFunc(createNodeRequest);
+ }
sqlite3_reset(selectNodeAddDataByNodeStmt);
sqlite3_clear_bindings(selectNodeAddDataByNodeStmt);
@@ -1211,7 +1215,10 @@ namespace odhtdb
Log::debug("Got add object, timestamp: %zu, data: %.*s", timestamp, decryptedBody.getDecryptedText().size, decryptedBody.getDecryptedText().data);
const DatabaseAddNodeRequest addNodeRequest(&nodeHash, &dataHash, timestamp, creatorPublicKey, decryptedBody.getDecryptedText(), database);
if(database->onAddNodeCallbackFunc)
+ {
+ std::lock_guard<std::recursive_mutex> lock(databaseOperationCallbackMutex);
database->onAddNodeCallbackFunc(addNodeRequest);
+ }
}
catch(DecryptionException &e)
{
@@ -1244,7 +1251,10 @@ namespace odhtdb
Log::debug("Got add user object, timestamp: %zu, user added: %s", timestamp, userToAddPublicKey->toString().c_str());
DatabaseAddUserRequest addUserRequest(&nodeHash, &dataHash, timestamp, creatorPublicKey, userToAddPublicKey, groupToAddUserTo, database);
if(database->onAddUserCallbackFunc)
+ {
+ std::lock_guard<std::recursive_mutex> lock(databaseOperationCallbackMutex);
database->onAddUserCallbackFunc(addUserRequest);
+ }
return true;
}