edits
[iotcloud.git] / version2 / src / C / Transaction.cc
index 80e70cd1dc456c2992fd9c17c58f1f9b8b39871e..258c22b6d61c43f113aa4f3f6363024c4b11e7d1 100644 (file)
@@ -27,15 +27,38 @@ Transaction::Transaction() :
 }
 
 Transaction::~Transaction() {
-       delete parts;
-       delete keyValueGuardSet;
-       delete keyValueUpdateSet;
+       if (missingParts)
+               delete missingParts;
+       {
+               delete parts;
+       }
+       {
+               SetIterator<KeyValue *, KeyValue *> *kvit = keyValueGuardSet->iterator();
+               while (kvit->hasNext()) {
+                       KeyValue *kvGuard = kvit->next();
+                       delete kvGuard;
+               }
+               delete kvit;
+               delete keyValueGuardSet;
+       }
+       {
+               SetIterator<KeyValue *, KeyValue *> *kvit = keyValueUpdateSet->iterator();
+               while (kvit->hasNext()) {
+                       KeyValue *kvUpdate = kvit->next();
+                       delete kvUpdate;
+               }
+               delete kvit;
+               delete keyValueUpdateSet;
+       }
+       delete partsPendingSend;
 }
 
 void Transaction::addPartEncode(TransactionPart *newPart) {
        TransactionPart *old = parts->setExpand(newPart->getPartNumber(), newPart);
-       if (old == NULL)
+       if (old == NULL) {
                partCount++;
+       } else
+               delete old;
        partsPendingSend->add(newPart->getPartNumber());
 
        sequenceNumber = newPart->getSequenceNumber();
@@ -270,6 +293,7 @@ void Transaction::decodeTransactionData() {
                KeyValue *kv = (KeyValue *)KeyValue_decode(bbDecode);
                keyValueUpdateSet->add(kv);
        }
+       delete bbDecode;
 }
 
 bool Transaction::evaluateGuard(Hashtable<IoTString *, KeyValue *, uintptr_t, 0, hashString, StringEquals> *committedKeyValueTable, Hashtable<IoTString *, KeyValue *, uintptr_t, 0, hashString, StringEquals> *speculatedKeyValueTable, Hashtable<IoTString *, KeyValue *, uintptr_t, 0, hashString, StringEquals> *pendingTransactionSpeculatedKeyValueTable) {