throw new IllegalMonitorStateException("notifying " + o);
raiseIllegalMonitorStateException("notifying ", o);
  public static void notify (Object o) {    if (VM.BuildForEventLogging && VM.EventLoggingEnabled) { VM_EventLogger.logNotifyBegin(); }    if (STATS) notifyOperations++;    VM_Lock l = VM_ObjectModel.getHeavyLock(o, false);    if (l == null) return;    if (l.ownerId != VM_Magic.getThreadId())      throw new IllegalMonitorStateException("notifying " + o);    l.mutex.lock(); // until unlock(), thread-switching fatal    VM_Thread t = l.waiting.dequeue();    if (false) { // this "optimization" seems tempting, but actually makes things worse (on Volano, at least) [--DL]       if (t != null) { // global queue: check to see if thread's stack in use by some other dispatcher          if (t.beingDispatched) l.entering.enqueue(t); // normal scheduling          else VM_Processor.getCurrentProcessor().readyQueue.enqueueHighPriority(t); // optimized scheduling       }    } else {      if (t != null) l.entering.enqueue(t);    }    l.mutex.unlock(); // thread-switching benign    if (VM.BuildForEventLogging && VM.EventLoggingEnabled) { VM_EventLogger.logNotifyEnd(); }  }