Ref counting
[iotcloud.git] / version2 / src / C / TransactionPart.h
index c254049fab45f1a7687a46394c77bfcd4d59fad4..47966e4feead9f4e85b43c53f62ce1d226dbcbc0 100644 (file)
@@ -15,12 +15,12 @@ private:
        int64_t clientLocalSequenceNumber;              // Sequence number of the transaction that this is a part of
        int32_t partNumber;     // Parts position in the
        bool fldisLastPart;
-
+       int32_t refCount;
        Pair<int64_t, int64_t> transactionId;
        Pair<int64_t, int32_t> partId;
 
        Array<char> *data;
-
+       
 public:
        TransactionPart(Slot *s, int64_t _machineId, int64_t _arbitratorId, int64_t _clientLocalSequenceNumber, int _partNumber, Array<char> *_data, bool _isLastPart) : Entry(s),
                sequenceNumber(-1),
@@ -29,6 +29,7 @@ public:
                clientLocalSequenceNumber(_clientLocalSequenceNumber),
                partNumber(_partNumber),
                fldisLastPart(_isLastPart),
+               refCount(1),
                transactionId(Pair<int64_t, int64_t>(machineId, clientLocalSequenceNumber)),
                partId(Pair<int64_t, int32_t>(clientLocalSequenceNumber, partNumber)),
                data(_data) {
@@ -48,6 +49,8 @@ public:
        void setSequenceNumber(int64_t _sequenceNumber);
        void encode(ByteBuffer *bb);
        char getType();
+       void releaseRef() {if ((--refCount)==0) delete this;}   
+       void acquireRef() {refCount++;}
        Entry *getCopy(Slot *s);
 };