X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=version2%2Fsrc%2FC%2FTransaction.cc;fp=version2%2Fsrc%2FC%2FTransaction.cc;h=258c22b6d61c43f113aa4f3f6363024c4b11e7d1;hb=0173578905303681df8ea5f3c35b3ead109c8ba8;hp=80e70cd1dc456c2992fd9c17c58f1f9b8b39871e;hpb=b7ed1849727b50e226f3b9d1c432d3071d739368;p=iotcloud.git diff --git a/version2/src/C/Transaction.cc b/version2/src/C/Transaction.cc index 80e70cd..258c22b 100644 --- a/version2/src/C/Transaction.cc +++ b/version2/src/C/Transaction.cc @@ -27,15 +27,38 @@ Transaction::Transaction() : } Transaction::~Transaction() { - delete parts; - delete keyValueGuardSet; - delete keyValueUpdateSet; + if (missingParts) + delete missingParts; + { + delete parts; + } + { + SetIterator *kvit = keyValueGuardSet->iterator(); + while (kvit->hasNext()) { + KeyValue *kvGuard = kvit->next(); + delete kvGuard; + } + delete kvit; + delete keyValueGuardSet; + } + { + SetIterator *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 *committedKeyValueTable, Hashtable *speculatedKeyValueTable, Hashtable *pendingTransactionSpeculatedKeyValueTable) {