/** * Releases memory allocated for this queue stripe. */ void destruct() { lock.lock(); try { for (long n = head, prev = 0; n != 0; prev = n, n = next(n)) mem.releaseSystem(prev, NODE); } finally { lock.unlock(); } }
/** * Polls oldest entry from the queue. * * @return Queue node address. */ long prePoll() { lock.lock(); try { long n = head; while (n != 0) { if (!polling(n)) { // Mark as polling, but do not remove. // Node will be removed by explicitly calling remove. polling(n, true); break; } n = next(n); } return n; } finally { lock.unlock(); } }
/** * Unlinks and releases queue node. * * @param qAddr Queue node address. */ private void unlink(long qAddr) { assert head != 0 && tail != 0; long prev = 0; long next = next(qAddr); if (head == qAddr) head = next; else { prev = previous(qAddr); assert prev != 0 : "Invalid previous link for stripe: " + order; next(prev, next); } if (next != 0) previous(next, prev); else { assert qAddr == tail; tail = prev; } mem.releaseSystem(qAddr, NODE); size--; assert head != 0 || (tail == 0 && size == 0); }
/** * Polls oldest entry from the queue. * * @return Queue node address. */ long prePoll() { lock.lock(); try { long n = head; while (n != 0) { if (!polling(n)) { // Mark as polling, but do not remove. // Node will be removed by explicitly calling remove. polling(n, true); break; } n = next(n); } return n; } finally { lock.unlock(); } }
/** * Releases memory allocated for this queue stripe. */ void destruct() { lock.lock(); try { for (long n = head, prev = 0; n != 0; prev = n, n = next(n)) mem.releaseSystem(prev, NODE); } finally { lock.unlock(); } }
/** * Unlinks and releases queue node. * * @param qAddr Queue node address. */ private void unlink(long qAddr) { assert head != 0 && tail != 0; long prev = 0; long next = next(qAddr); if (head == qAddr) head = next; else { prev = previous(qAddr); assert prev != 0 : "Invalid previous link for stripe: " + order; next(prev, next); } if (next != 0) previous(next, prev); else { assert qAddr == tail; tail = prev; } mem.releaseSystem(qAddr, NODE); size--; assert head != 0 || (tail == 0 && size == 0); }