public synchronized void handleMutexMessage(String message) {
		String[] messageArray = message.split(" ");
		if(!messageArray[0].equals("mutex")){
			throw new IllegalArgumentException("Non-mutex command passed to handleMutexrMessage: " + message);
		}
		
		if(messageArray.length != 5){
			throw new IllegalArgumentException("Invalid number of tokens in mutex message: " + message);
		}
		
		String command = messageArray[1];
		
		//id of source server
		int msg_id = Integer.parseInt(messageArray[2]);
		
		//clock timestamp
		int msg_clock = Integer.parseInt(messageArray[3]);
		
		//queue timestamp
		int msg_timestamp = Integer.parseInt(messageArray[4]);
		
		clock.receiveAction(msg_id, msg_clock);
		if (command.equals("request")) {
			queue[msg_id] = msg_clock;
			sendMessage("mutex ack " + myId + " " + clock.getValue(myId) + " " + queue[myId], servers.get(msg_id));
		} else if (command.equals("release")){
			queue[msg_id] = Integer.MAX_VALUE;
		} else if (command.equals("ack")) {
			// ack <my id> <my clock value>
			int ack_id = Integer.parseInt(messageArray[2]);
			int ack_clock = Integer.parseInt(messageArray[3]);
			
			queue[msg_id] = msg_timestamp;
			
		} else {
			throw new IllegalArgumentException("Bad mutex command syntax: " + message);
		}
			
		notifyAll(); // okayCS() may be true now
		
		System.out.println("");
	}