Example #1
0
  @Override
  public void terminateProcess(ThreadInfo ti) {
    SystemState ss = getSystemState();
    ThreadInfo[] liveThreads = getLiveThreads();
    ThreadInfo finalizerTi = null;

    for (int i = 0; i < liveThreads.length; i++) {
      if (!liveThreads[i].isSystemThread()) {
        // keep the stack frames around, so that we can inspect the snapshot
        liveThreads[i].setTerminated();
      } else {
        // FinalizerThread is not killed at this point. We need to keep it around in
        // case fianlizable objects are GCed after System.exit() returns.
        finalizerTi = liveThreads[i];
      }
    }

    ss.setMandatoryNextChoiceGenerator(
        new BreakGenerator("exit", ti, true), "exit without break CG");

    // if there is a finalizer thread, we have to run the last GC, to queue finalizable objects, if
    // any
    if (finalizerTi != null) {
      assert finalizerTi.isAlive();
      activateGC();
    }
  }
Example #2
0
 /** Saves the backtracking information. */
 @Override
 public void pushSystemState() {
   sstack = new ImmutableList<Object>(ss.getBacktrackData(), sstack);
 }
Example #3
0
 protected void backtrackSystemState() {
   Object o = sstack.head;
   sstack = sstack.tail;
   ss.backtrackTo(o);
 }