catch(IllegalMonitorStateException ex) { throw ex; }
    public Object peek() throws QueueClosedException {        Object retval=null;        synchronized(mutex) {            while(l.size() == 0) {                if(closed)                    throw new QueueClosedException();                try {                    mutex.wait();                }                catch(IllegalMonitorStateException ex) {                    throw ex;                }                catch(InterruptedException ex) {                }            }            if(closed)                throw new QueueClosedException();	    try {		retval=l.getFirst();	    }	    catch(NoSuchElementException ex) {		if(log.isErrorEnabled()) log.error("retval == null, size()=" + l.size());		return null;		    }        }        if(retval == endMarker) {            close(false); // mark queue as closed            throw new QueueClosedException();        }        return retval;    }