X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=version2%2Fsrc%2FC%2FArbitrationRound.cc;h=cc316f0578ab91d8e5aadc3298b549d34fae4872;hb=3f24bffc82ebfe2730308b63100af08645316577;hp=159aeaea39ccb1bcac682154a4469b2046407c53;hpb=7095771b9769e87bdc5df84e306e3d95e6e4040b;p=iotcloud.git diff --git a/version2/src/C/ArbitrationRound.cc b/version2/src/C/ArbitrationRound.cc index 159aeae..cc316f0 100644 --- a/version2/src/C/ArbitrationRound.cc +++ b/version2/src/C/ArbitrationRound.cc @@ -1,5 +1,6 @@ #include "ArbitrationRound.h" #include "Commit.h" +#include "CommitPart.h" ArbitrationRound::ArbitrationRound(Commit *_commit, Hashset *_abortsBefore) : abortsBefore(_abortsBefore), @@ -19,6 +20,11 @@ ArbitrationRound::ArbitrationRound(Commit *_commit, Hashset *_abortsBef ArbitrationRound::~ArbitrationRound() { delete abortsBefore; + uint partsSize = parts->size(); + for (uint i = 0; i < partsSize; i++) { + Entry * part = parts->get(i); + part->releaseRef(); + } delete parts; if (commit != NULL) delete commit; @@ -28,6 +34,11 @@ void ArbitrationRound::generateParts() { if (didGenerateParts) { return; } + uint partsSize = parts->size(); + for (uint i = 0; i < partsSize; i++) { + Entry * part = parts->get(i); + part->releaseRef(); + } parts->clear(); SetIterator *abit = abortsBefore->iterator(); while (abit->hasNext()) @@ -37,7 +48,9 @@ void ArbitrationRound::generateParts() { Vector *cParts = commit->getParts(); uint cPartsSize = cParts->size(); for (uint i = 0; i < cPartsSize; i++) { - parts->add((Entry *)cParts->get(i)); + CommitPart * part = cParts->get(i); + part->acquireRef(); + parts->add((Entry *)part); } } } @@ -47,7 +60,12 @@ Vector *ArbitrationRound::getParts() { } void ArbitrationRound::removeParts(Vector *removeParts) { - parts->removeAll(removeParts); + uint size = removeParts->size(); + for(uint i=0; i < size; i++) { + Entry * e = removeParts->get(i); + if (parts->remove(e)) + e->releaseRef(); + } didSendPart = true; }