public Object poll(QueueInfo queue, long timeout) throws IOException, InterruptedException { readOnly = false; if (added != null) { List queueAdded = (List) added.get(queue); if (queueAdded != null) { return queueAdded.remove(queueAdded.size() - 1); } } Object o = queue.poll(Long.MAX_VALUE); if (o != null) { if (removed == null) { removed = new HashMap(); } List queueRemoved = (List) removed.get(queue); if (queueRemoved == null) { queueRemoved = new ArrayList(); removed.put(queue, queueRemoved); } queueRemoved.add(o); o = doLoad(queue, o); } return o; }