/*
 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
 *
 *  This file is licensed to You under the Common Public License (CPL);
 *  You may not use this file except in compliance with the License. You
 *  may obtain a copy of the License at
 *
 *      http://www.opensource.org/licenses/cpl1.0.php
 *
 *  See the COPYRIGHT.txt file distributed with this work for information
 *  regarding copyright ownership.
 */
package test.org.jikesrvm.basic.core.threads;

class Flag {
  static boolean timedWait;
  boolean flag;

  // Set this flag.
  //
  synchronized void set() {
    XThread.say("flag: notification sent");
    flag = true;
    notifyAll();
  }

  // Wait for this flag to be set.
  //
  synchronized void await() {
    if (!flag) {

      if (timedWait) {
        while (!flag) {
          try { wait(1000000); } catch (InterruptedException e) {}
          if (!flag) { XThread.say("flag: timed out"); }
        }
      } else {
        try { wait(); } catch (InterruptedException e) {}
      }
      XThread.say("flag: notification received");
    } else {
      XThread.say("flag: already set");
    }
  }
}
