|
5 | 5 | import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEvent;
|
6 | 6 | import org.eclipse.gemoc.dsl.debug.ide.event.IDSLDebugEventProcessor;
|
7 | 7 | import org.eclipse.gemoc.dsl.debug.ide.event.debugger.BreakpointReply;
|
| 8 | +import org.eclipse.gemoc.dsl.debug.ide.event.debugger.SetCurrentInstructionReply; |
8 | 9 | import org.eclipse.gemoc.dsl.debug.ide.event.debugger.SpawnRunningThreadReply;
|
9 | 10 | import org.eclipse.gemoc.dsl.debug.ide.event.debugger.TerminatedReply;
|
10 | 11 |
|
11 | 12 | public class HeadlessDebugEventHandler implements IDSLDebugEventProcessor {
|
12 | 13 |
|
13 | 14 | private volatile Semaphore breakReached;
|
14 |
| - private volatile boolean simulationEnded; |
| 15 | + |
| 16 | + public HeadlessDebugEventHandler() { |
| 17 | + this.breakReached = new Semaphore(0); |
| 18 | + } |
15 | 19 |
|
16 | 20 | @Override
|
17 | 21 | public Object handleEvent(IDSLDebugEvent event) {
|
18 |
| - if (event instanceof SpawnRunningThreadReply) { |
19 |
| - simulationEnded = false; |
20 |
| - breakReached = new Semaphore(-1); |
21 |
| - } else if (event instanceof BreakpointReply) { |
22 |
| - breakReached.release(); |
23 |
| - } else if (event instanceof TerminatedReply) { |
24 |
| - simulationEnded = true; |
| 22 | + if (event instanceof BreakpointReply || event instanceof TerminatedReply) { |
25 | 23 | breakReached.release();
|
26 | 24 | }
|
27 |
| - //System.out.println(" Debug event: " + event.toString()); |
| 25 | + System.err.println(" Debug event: " + event.toString()); |
28 | 26 | return null;
|
29 | 27 | }
|
30 | 28 |
|
31 |
| - public boolean isSimulationEnded() { |
32 |
| - return this.simulationEnded; |
33 |
| - } |
34 |
| - |
35 | 29 | public void waitBreakReached() throws InterruptedException {
|
36 | 30 | this.breakReached.acquire();
|
37 | 31 | }
|
38 | 32 |
|
| 33 | + public void clearPermits() { |
| 34 | + this.breakReached.drainPermits(); |
| 35 | + } |
| 36 | + |
39 | 37 | }
|
0 commit comments