aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/odhtdb/Database.hpp10
-rw-r--r--src/Database.cpp2
-rw-r--r--tests/main.cpp17
3 files changed, 27 insertions, 2 deletions
diff --git a/include/odhtdb/Database.hpp b/include/odhtdb/Database.hpp
index a5fcb60..5ec0da0 100644
--- a/include/odhtdb/Database.hpp
+++ b/include/odhtdb/Database.hpp
@@ -142,6 +142,14 @@ namespace odhtdb
requestOldDataListenerFuture = other.requestOldDataListenerFuture;
reponseKeyInfoHash = other.reponseKeyInfoHash;
}
+ DatabaseSeedInfo& operator=(const DatabaseSeedInfo &other)
+ {
+ newDataListenerFuture = other.newDataListenerFuture;
+ responseKeyFuture = other.responseKeyFuture;
+ requestOldDataListenerFuture = other.requestOldDataListenerFuture;
+ reponseKeyInfoHash = other.reponseKeyInfoHash;
+ return *this;
+ }
};
using CreateNodeCallbackFunc = std::function<void(const DatabaseCreateNodeRequest&)>;
@@ -178,7 +186,7 @@ namespace odhtdb
// Throws PermissionDeniedException if user @userToPerformActionWith is not allowed to add user @userToAdd to group @groupToAddUserTo
void addUser(const DatabaseNode &nodeInfo, const Signature::KeyPair &userToPerformActionWith, const Signature::PublicKey &userToAddPublicKey, const DataView &groupToAddUserTo);
- ntp::NtpTimestamp getSyncedTimestampUtc() const;
+ static ntp::NtpTimestamp getSyncedTimestampUtc();
bool doesStoredUserExist(const std::string &username) const;
diff --git a/src/Database.cpp b/src/Database.cpp
index 8d32240..a05aae6 100644
--- a/src/Database.cpp
+++ b/src/Database.cpp
@@ -555,7 +555,7 @@ namespace odhtdb
nodePutWithRetry(&node, dhtKey.getNewDataListenerKey(), addDataValue);
}
- ntp::NtpTimestamp Database::getSyncedTimestampUtc() const
+ ntp::NtpTimestamp Database::getSyncedTimestampUtc()
{
while(!timestampSynced)
{
diff --git a/tests/main.cpp b/tests/main.cpp
index 6a74548..17348c4 100644
--- a/tests/main.cpp
+++ b/tests/main.cpp
@@ -384,6 +384,22 @@ void testMemoryUsage()
}
}
+pair<bool, shared_ptr<OwnedByteArray>> __attribute__((optimize("O0"))) getDataNoCopy()
+{
+ u8 *decryptionKeyRawCopy = new u8[1024 * 1024 * 64];
+ memcpy(decryptionKeyRawCopy, "hello, world!", 14);
+ shared_ptr<OwnedByteArray> decryptionKey = make_shared<OwnedByteArray>(decryptionKeyRawCopy, ENCRYPTION_KEY_BYTE_SIZE);
+ return make_pair(true, decryptionKey);
+}
+
+void __attribute__((optimize("O0"))) testMemoryLeak()
+{
+ {
+ auto data = getDataNoCopy();
+ printf("data: %s\n", data.second->data);
+ }
+}
+
struct Test
{
function<void()> testFunc;
@@ -396,6 +412,7 @@ int main(int argc, char **argv)
testByName["standard"] = { testStandard, false };
testByName["two_local_nodes"] = { testTwoLocalNodes, false };
testByName["memory_usage"] = { testMemoryUsage, true };
+ testByName["test_memory_leak"] = { testMemoryLeak, true };
const char *testName = "all";
if(argc > 1)