Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorAlain Magloire2004-09-12 13:24:34 +0000
committerAlain Magloire2004-09-12 13:24:34 +0000
commit7c28610f550b8178e92e936c54ab48dfc8a7f4d2 (patch)
tree6b5aa597339db9c3970c2acb04bbd82c7fbab255 /debug
parent057edb19f313eb6ff6904982749f325f4ccf1368 (diff)
downloadorg.eclipse.cdt-7c28610f550b8178e92e936c54ab48dfc8a7f4d2.tar.gz
org.eclipse.cdt-7c28610f550b8178e92e936c54ab48dfc8a7f4d2.tar.xz
org.eclipse.cdt-7c28610f550b8178e92e936c54ab48dfc8a7f4d2.zip
2004-09-12 Alain Magloire
Since MISession is attach to the Target, the way we fire termination events must change also. * cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java * src/org/eclipse/cdt/debug/mi/core/MISession.java
Diffstat (limited to 'debug')
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/ChangeLog9
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java11
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java1
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java28
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java2
-rw-r--r--debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java3
6 files changed, 45 insertions, 9 deletions
diff --git a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog
index d15fac5fde8..8bfcebc3e71 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/ChangeLog
+++ b/debug/org.eclipse.cdt.debug.mi.core/ChangeLog
@@ -1,3 +1,12 @@
+2004-09-12 Alain Magloire
+ Since MISession is attach to the Target, the
+ way we fire termination events must change also.
+ * cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
+ * cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java
+ * cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java
+ * cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java
+ * src/org/eclipse/cdt/debug/mi/core/MISession.java
+
2004-09-09 Alain Magloire
Introduction of new classes in the CDI interface
ICDIExecuteStep
diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
index 1859d4c19cc..fd9e284ca7c 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
@@ -162,7 +162,11 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
} else if (miEvent instanceof MIInferiorExitEvent) {
cdiList.add(new ExitedEvent(session, (MIInferiorExitEvent)miEvent));
} else if (miEvent instanceof MIGDBExitEvent) {
- cdiList.add(new DestroyedEvent(session));
+ // Remove the target from the list.
+ Target target = session.getTarget(miEvent.getMISession());
+ if (target != null) {
+ session.removeTargets(new Target[] { target });
+ }
} else if (miEvent instanceof MIDetachedEvent) {
cdiList.add(new DisconnectedEvent(session, (MIDetachedEvent)miEvent));
} else if (miEvent instanceof MIBreakpointDeletedEvent) {
@@ -233,11 +237,14 @@ public class EventManager extends SessionObject implements ICDIEventManager, Obs
list.remove(listener);
}
+ public void removeEventListeners() {
+ list.clear();
+ }
/**
* Send ICDIEvent to the listeners.
*/
- private void fireEvents(ICDIEvent[] cdiEvents) {
+ public void fireEvents(ICDIEvent[] cdiEvents) {
if (cdiEvents != null && cdiEvents.length > 0) {
ICDIEventListener[] listeners = (ICDIEventListener[])list.toArray(new ICDIEventListener[0]);
for (int i = 0; i < listeners.length; i++) {
diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java
index b9152729b2b..7ad78295373 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/ProcessManager.java
@@ -63,7 +63,6 @@ public class ProcessManager extends Manager {
Target target = targets[i];
MISession miSession = target.getMISession();
if (miSession != null) {
- miSession.notifyObservers(new MIInferiorExitEvent(miSession, 0));
miSession.deleteObserver(eventManager);
}
if (currentTarget != null && currentTarget.equals(target)) {
diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java
index 32197a7af97..c295ec461f7 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/Session.java
@@ -26,9 +26,11 @@ import org.eclipse.cdt.debug.core.cdi.ICDISharedLibraryManager;
import org.eclipse.cdt.debug.core.cdi.ICDISignalManager;
import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
import org.eclipse.cdt.debug.core.cdi.ICDIVariableManager;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.event.DestroyedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIEnvironmentDirectory;
@@ -245,12 +247,30 @@ public class Session implements ICDISession, ICDISessionObject {
ProcessManager pMgr = getProcessManager();
Target[] targets = pMgr.getTargets();
for (int i = 0; i < targets.length; ++i) {
- if (!targets[i].isTerminated()) {
- targets[i].terminate();
+ if (!targets[i].getMISession().isTerminated()) {
+ targets[i].getMISession().terminate();
}
}
- //TODO: the ExitEvent is sent by MISession.terminate()
- // We nee move it here.
+ // 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();
}
/**
* @deprecated
diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java
index 5400e2e875a..f0f1e7ac377 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/model/Target.java
@@ -653,8 +653,6 @@ public class Target implements ICDITarget {
miSession.getMIInferior().terminate();
} catch (MIException e) {
throw new MI2CDIException(e);
- } finally {
- miSession.terminate();
}
}
diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java
index 903460bafd0..3eda9d3e366 100644
--- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java
+++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/MISession.java
@@ -482,6 +482,9 @@ public class MISession extends Observable {
// Tell the observers that the session is terminated
notifyObservers(new MIGDBExitEvent(this, 0));
+
+ // Should not be necessary but just to be safe.
+ deleteObservers();
}
/**

Back to the top