@Override public CompositeByteBuf setInt(int index, int value) { super.setInt(index, value); return this; }
@Override public String toString() { String result = super.toString(); result = result.substring(0, result.length() - 1); return result + ", components=" + componentCount + ')'; }
@Override public CompositeByteBuf writeBytes(ByteBuf src, int srcIndex, int length) { super.writeBytes(src, srcIndex, length); return this; }
private boolean release0(int decrement) { int rawCnt = nonVolatileRawCnt(), realCnt = toLiveRealCnt(rawCnt, decrement); if (decrement == realCnt) { if (refCntUpdater.compareAndSet(this, rawCnt, 1)) { deallocate(); return true; } return retryRelease0(decrement); } return releaseNonFinal0(decrement, rawCnt, realCnt); }
private boolean retryRelease0(int decrement) { for (;;) { int rawCnt = refCntUpdater.get(this), realCnt = toLiveRealCnt(rawCnt, decrement); if (decrement == realCnt) { if (refCntUpdater.compareAndSet(this, rawCnt, 1)) { deallocate(); return true; } } else if (decrement < realCnt) { // all changes to the raw count are 2x the "real" change if (refCntUpdater.compareAndSet(this, rawCnt, rawCnt - (decrement << 1))) { return false; } } else { throw new IllegalReferenceCountException(realCnt, -decrement); } Thread.yield(); // this benefits throughput under high contention } }
@Override public CompositeByteBuf writeLong(long value) { super.writeLong(value); return this; }
@Override public CompositeByteBuf writeShort(int value) { super.writeShort(value); return this; }
@Override public CompositeByteBuf writeInt(int value) { super.writeInt(value); return this; }
@Override public CompositeByteBuf writeMedium(int value) { super.writeMedium(value); return this; }
@Override public CompositeByteBuf writeZero(int length) { super.writeZero(length); return this; }
@Override public CompositeByteBuf clear() { super.clear(); return this; }
private boolean release0(int decrement) { int oldRef = refCntUpdater.getAndAdd(this, -decrement); if (oldRef == decrement) { deallocate(); return true; } else if (oldRef < decrement || oldRef - decrement > oldRef) { // Ensure we don't over-release, and avoid underflow. refCntUpdater.getAndAdd(this, decrement); throw new IllegalReferenceCountException(oldRef, -decrement); } return false; } /**
private boolean release0(int decrement) { int rawCnt = nonVolatileRawCnt(), realCnt = toLiveRealCnt(rawCnt, decrement); if (decrement == realCnt) { if (refCntUpdater.compareAndSet(this, rawCnt, 1)) { deallocate(); return true; } return retryRelease0(decrement); } return releaseNonFinal0(decrement, rawCnt, realCnt); }
@Override public CompositeByteBuf writeLong(long value) { super.writeLong(value); return this; }
@Override public CompositeByteBuf writeChar(int value) { super.writeShort(value); return this; }
@Override public CompositeByteBuf writeInt(int value) { super.writeInt(value); return this; }
@Override public CompositeByteBuf writeMedium(int value) { super.writeMedium(value); return this; }
@Override public CompositeByteBuf writeZero(int length) { super.writeZero(length); return this; }
@Override public CompositeByteBuf clear() { super.clear(); return this; }
private boolean retryRelease0(int decrement) { for (;;) { int rawCnt = refCntUpdater.get(this), realCnt = toLiveRealCnt(rawCnt, decrement); if (decrement == realCnt) { if (refCntUpdater.compareAndSet(this, rawCnt, 1)) { deallocate(); return true; } } else if (decrement < realCnt) { // all changes to the raw count are 2x the "real" change if (refCntUpdater.compareAndSet(this, rawCnt, rawCnt - (decrement << 1))) { return false; } } else { throw new IllegalReferenceCountException(realCnt, -decrement); } Thread.yield(); // this benefits throughput under high contention } }