edits
[iotcloud.git] / version2 / src / C / Commit.cc
index a24e0148df376b6180c7bd574ff499c6c6b37519..2ee208d5fd7397995e5f39e452a9ec44825e7308 100644 (file)
@@ -33,8 +33,15 @@ Commit::Commit(int64_t _sequenceNumber, int64_t _machineId, int64_t _transaction
 
 Commit::~Commit() {
        delete parts;
-       delete keyValueUpdateSet;
-       delete liveKeys;
+       {
+               SetIterator<KeyValue *, KeyValue *, uintptr_t, 0> * keyit = keyValueUpdateSet->iterator();
+               while(keyit->hasNext()) {
+                       delete keyit->next();
+               }
+               delete keyit;
+               delete keyValueUpdateSet;
+       }
+       delete liveKeys;
        if (missingParts != NULL)
                delete missingParts;
 }
@@ -99,8 +106,9 @@ Vector<CommitPart *> *Commit::getParts() {
 }
 
 void Commit::addKV(KeyValue *kv) {
-       keyValueUpdateSet->add(kv);
-       liveKeys->add(kv->getKey());
+       KeyValue * kvcopy = kv->getCopy();
+       keyValueUpdateSet->add(kvcopy);
+       liveKeys->add(kvcopy->getKey());
 }
 
 void Commit::invalidateKey(IoTString *key) {
@@ -166,6 +174,7 @@ void Commit::createCommitParts() {
                commitPartCount++;
                remaining -= copySize;
        }
+       delete charData;
 }
 
 void Commit::decodeCommitData() {
@@ -201,6 +210,7 @@ void Commit::decodeCommitData() {
                keyValueUpdateSet->add(kv);
                liveKeys->add(kv->getKey());
        }
+       delete bbDecode;
 }
 
 Array<char> *Commit::convertDataToBytes() {
@@ -227,8 +237,10 @@ Array<char> *Commit::convertDataToBytes() {
                kv->encode(bbEncode);
        }
        delete kvit;
-
-       return bbEncode->array();
+       Array<char> * array = bbEncode->array();
+       bbEncode->releaseArray();
+       delete bbEncode;
+       return array;
 }
 
 void Commit::setKVsMap(Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals> *newKVs) {
@@ -237,8 +249,9 @@ void Commit::setKVsMap(Hashset<KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueE
        SetIterator<KeyValue *, KeyValue *, uintptr_t, 0, hashKeyValue, KeyValueEquals> *kvit = newKVs->iterator();
        while (kvit->hasNext()) {
                KeyValue *kv = kvit->next();
-               liveKeys->add(kv->getKey());
-               keyValueUpdateSet->add(kv);
+               KeyValue *kvcopy = kv->getCopy();
+               liveKeys->add(kvcopy->getKey());
+               keyValueUpdateSet->add(kvcopy);
        }
        delete kvit;
 }