public void clear() { for (Node n = head.next; n != null; n = n.next) { Node.release(n); assert n.getRefCnt() == 0; n.clearEntry(); Node.free(n); } head.next = null; }
public void cancel(Node n) { // It's possible (although very unlikely) that this release operation sets n.refcnt to 0, // in which case n.refcnt could have been incremented from 0 by found(Node n) above. // Hence, n.refcnt can be decremented to 0 two times; so even when n.refcnt is 0, // we don't decrement n.next.refcnt immediately since it can double-decrement // n.next.refcnt. // We decrement n.next.refcnt in Node.alloc(), where we know that only a single thread is // accessing the node. Node.release(n); }
void release(Node b, Node n) { Node.release(n); Node.release(b); }
void release(Node b, Node n, Node f) { Node.release(f); Node.release(n); Node.release(b); }
void release(Node n) { Node.release(n); }