package io.netty.util;

import io.netty.util.internal.ObjectUtil;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;

/* JADX INFO: loaded from: classes.dex */
public abstract class AbstractReferenceCounted implements ReferenceCounted {
    private static final AtomicIntegerFieldUpdater<AbstractReferenceCounted> refCntUpdater = AtomicIntegerFieldUpdater.newUpdater(AbstractReferenceCounted.class, "refCnt");
    private volatile int refCnt = 1;

    private boolean release0(int i2) {
        AtomicIntegerFieldUpdater<AbstractReferenceCounted> atomicIntegerFieldUpdater = refCntUpdater;
        int andAdd = atomicIntegerFieldUpdater.getAndAdd(this, -i2);
        if (andAdd == i2) {
            deallocate();
            return true;
        }
        if (andAdd >= i2 && andAdd - i2 <= andAdd) {
            return false;
        }
        atomicIntegerFieldUpdater.getAndAdd(this, i2);
        throw new IllegalReferenceCountException(andAdd, i2);
    }

    private ReferenceCounted retain0(int i2) {
        AtomicIntegerFieldUpdater<AbstractReferenceCounted> atomicIntegerFieldUpdater = refCntUpdater;
        int andAdd = atomicIntegerFieldUpdater.getAndAdd(this, i2);
        if (andAdd > 0 && andAdd + i2 >= andAdd) {
            return this;
        }
        atomicIntegerFieldUpdater.getAndAdd(this, -i2);
        throw new IllegalReferenceCountException(andAdd, i2);
    }

    public abstract void deallocate();

    @Override // io.netty.util.ReferenceCounted
    public final int refCnt() {
        return this.refCnt;
    }

    @Override // io.netty.util.ReferenceCounted
    public boolean release() {
        return release0(1);
    }

    @Override // io.netty.util.ReferenceCounted
    public boolean release(int i2) {
        return release0(ObjectUtil.checkPositive(i2, "decrement"));
    }

    @Override // io.netty.util.ReferenceCounted
    public ReferenceCounted retain() {
        return retain0(1);
    }

    @Override // io.netty.util.ReferenceCounted
    public ReferenceCounted retain(int i2) {
        return retain0(ObjectUtil.checkPositive(i2, "increment"));
    }

    public final void setRefCnt(int i2) {
        refCntUpdater.set(this, i2);
    }

    @Override // io.netty.util.ReferenceCounted
    public ReferenceCounted touch() {
        return touch(null);
    }
}
