/** @see org.eclipse.cdt.debug.core.cdi.ICDISession#terminate(ICDITarget) */ @Override public void terminate() throws CDIException { ProcessManager pMgr = getProcessManager(); Target[] targets = pMgr.getTargets(); for (int i = 0; i < targets.length; ++i) { if (!targets[i].getMISession().isTerminated()) { targets[i].getMISession().terminate(); } } // Do not do the removeTargets(), Target.getMISession().terminate() will do it // via an event, MIGDBExitEvent of the mi session // removeTargets(targets); // wait ~2 seconds for the targets to be terminated. for (int i = 0; i < 2; ++i) { targets = pMgr.getTargets(); if (targets.length == 0) { break; } try { Thread.sleep(1000); } catch (InterruptedException e) { // } } // send our goodbyes. EventManager eMgr = (EventManager) getEventManager(); eMgr.fireEvents(new ICDIEvent[] {new DestroyedEvent(this)}); eMgr.removeEventListeners(); }