/** * Removes queue node from queue. * * @param qAddr Address of queue node. */ void poll(long qAddr) { lock.lock(); try { assert polling(qAddr); unlink(qAddr); } finally { lock.unlock(); } }
/** * Removes queue node from queue. * * @param qAddr Address of queue node. */ void remove(long qAddr) { lock.lock(); try { // Don't remove polling entries (poll operation will remove them). if (!polling(qAddr)) unlink(qAddr); else // Update entry address in node to 0. entry(qAddr, 0); } 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(); } }
polling(qAddr, false); hash(qAddr, hash); entry(qAddr, addr);
/** * 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(); } }
/** * Removes queue node from queue. * * @param qAddr Address of queue node. */ void remove(long qAddr) { lock.lock(); try { // Don't remove polling entries (poll operation will remove them). if (!polling(qAddr)) unlink(qAddr); else // Update entry address in node to 0. entry(qAddr, 0); } finally { lock.unlock(); } }
/** * Removes queue node from queue. * * @param qAddr Address of queue node. */ void poll(long qAddr) { lock.lock(); try { assert polling(qAddr); unlink(qAddr); } finally { lock.unlock(); } }
polling(qAddr, false); hash(qAddr, hash); entry(qAddr, addr);