wi.setParentTask(null);
  public void removingFromBlackboard(Subscriber s, boolean commit) {    super.removingFromBlackboard(s, commit);    // Task t = getTask();    Workflow w = getWorkflow();    if (w == null) return; // if already disconnected...    if (ActiveSubscriptionObject.deferCommit) { /* this is an expensive test if we're going to waste it */      if (!w.isPropagatingToSubtasks() ) { // if we're not auto-propagating        for (Enumeration e = w.getTasks(); e.hasMoreElements(); ) {          NewTask wfstask = (NewTask) e.nextElement();          Blackboard.getTracker().checkpoint(commit, wfstask, "getParentTask");        }      }    }    if (!commit) return;    if (w.isPropagatingToSubtasks() ) { // if we're auto-propagating      WorkflowImpl wi = (WorkflowImpl) w;                  // rescind all subtasks of the workflow      List sts = wi.clearSubTasks();    // atomic get and clear the list      ListIterator it = sts.listIterator();      while (it.hasNext()) {        NewTask asub = (NewTask) it.next();	asub.setParentTask(null);	asub.setWorkflow(null);        s.publishRemove(asub);      }      wi.setParentTask(null);          } else {      // we're not auto-propagating      // disconnect the WF from the parent task      ((NewWorkflow)w).setParentTask(null);      for (Enumeration e = w.getTasks(); e.hasMoreElements(); ) {        NewTask wfstask = (NewTask) e.nextElement();        wfstask.setParentTask(null);	// Let the remover clear this pointer,	// but use it in the meantime if necessary.	// Note that removing the subtask will then clear	// this pointer, if not already done (via ASO method)	//	wfstask.setWorkflow(null);      }      // the plugin should reattach this workflow to a parent task.     }  }