@Override
	protected List<ByteBuffer> onRelease() 
	{
		ByteBuffer buffer;
		List<ByteBufferStack> stacks = new ArrayList<ByteBufferStack>();
		List<ByteBuffer> buffers = new ArrayList<ByteBuffer>();
		
		// Acquire lock to avoid concurrent adds and fills
		synchronized (writeLock) 
		{
			Iterator<Entry<Integer, ByteBufferStack>> iter = map.entrySet().iterator();
			// Remove each stack and add it to a list for later traversal. This
			// is done to avoid extended control of the write lock.
			while (iter.hasNext()) {
				stacks.add(iter.next().getValue());
				iter.remove();
			}
		}
		
		// Empty each stack into buffers
		for (ByteBufferStack s : stacks) 
		{
			// Pop em off!
			while ((buffer = s.pop()) != null) {
				buffers.add(buffer);
			}
		}
		
		return buffers;
	}