public boolean attempt(long msecs) throws InterruptedException {
		if(debug){
			DLogger.info("Thread "+OdbThread.getCurrentThreadName()+" : Trying to acquire(atempt) mutex " + name  );
			//DLogger.info("From " + StringUtils.exceptionToString(new Exception(), false));
		}
		try{
			if (Thread.interrupted())
				throw new InterruptedException();
			synchronized (this) {
				if (!inUse) {
					inUse = true;
					nbOwners++;
					return true;
				} else if (msecs <= 0)
					return false;
				else {
					long waitTime = msecs;
					long start = OdbTime.getCurrentTimeInMs();
					try {
						for (;;) {
							wait(waitTime);
							if (!inUse) {
								inUse = true;
								nbOwners++;
								return true;
							} 
							waitTime = msecs - (OdbTime.getCurrentTimeInMs() - start);
							if (waitTime <= 0)
								return false;
						}
					} catch (InterruptedException ex) {
						notify();
						throw ex;
					}
				}
			}			
		}finally{
			if(debug){
				DLogger.info("Thread "+OdbThread.getCurrentThreadName()+" : Mutex " + name+" acquired! (by attempt)"  );
			}
		}
	}