Synchronous actor calls in ScalaDebugTarget and ScalaThread can freeze debugger
The current implementation of ScalaDebugTarget#getInternalThreads and ScalaThread#internalGetStackFrames can potentially freeze the debugger, if the companion actor is dead. Click on the links to have more insights about the problem and a possible fix.
Leave a comment
(In scala-ide:268edc29640d5185753b96c824fc620ce5ad3fba) Fix #1001233 - Graceful termination of debug sessions
Major refactoring of actor code in debugger
Extracted a common superclass (``BaseDebuggerActor``) for all actors defined in
the debugger module. This avoids duplication and makes sure that actors
terminates consistently. This base class for actors provides a number of
interesting functionalities:
because it generates a lot of noise. Before enabling it, we need to add a TRACE
log level in the logger (I'll open a ticket for this).
actor will process messages accordingly to its `behavior` implementation. If
an `Exit` or `PoisonPill` message is processed by `this` actor, the actor is
guaranteed to execute `preExit` before terminating.
Last, I have also added a number of FIXMEs for some problematic code that could
cause the debug session to freeze. I'll be opening tickets for each one of
these issues, so that we don't forget to fix them by the final V2.1 release
(Re #1001307, Re #1001308, Re #1001310, Re #1001311).
Branch: master
Major refactoring of actor code in debugger
Extracted a common superclass (``BaseDebuggerActor``) for all actors defined in
the debugger module. This avoids duplication and makes sure that actors
terminates consistently. This base class for actors provides a number of
interesting functionalities:
- Automatic logging of all messages processed by the actor. This can be quite
because it generates a lot of noise. Before enabling it, we need to add a TRACE
log level in the logger (I'll open a ticket for this).
- Stackable behaviors. By calling `become/unbecome` an actor can easily
- Cleaner actor's life-cylce. Basically, when starting an actor, `postStart`
actor will process messages accordingly to its `behavior` implementation. If
an `Exit` or `PoisonPill` message is processed by `this` actor, the actor is
guaranteed to execute `preExit` before terminating.
Last, I have also added a number of FIXMEs for some problematic code that could
cause the debug session to freeze. I'll be opening tickets for each one of
these issues, so that we don't forget to fix them by the final V2.1 release
(Re #1001307, Re #1001308, Re #1001310, Re #1001311).
Branch: master
on 2012-11-04 19:26 *
By Mirco Dotta
(In scala-ide:268edc29640d5185753b96c824fc620ce5ad3fba) Fix #1001233 - Graceful termination of debug sessions
Major refactoring of actor code in debugger
Extracted a common superclass (``BaseDebuggerActor``) for all actors defined in
the debugger module. This avoids duplication and makes sure that actors
terminates consistently. This base class for actors provides a number of
interesting functionalities:
because it generates a lot of noise. Before enabling it, we need to add a TRACE
log level in the logger (I'll open a ticket for this).
actor will process messages accordingly to its `behavior` implementation. If
an `Exit` or `PoisonPill` message is processed by `this` actor, the actor is
guaranteed to execute `preExit` before terminating.
Last, I have also added a number of FIXMEs for some problematic code that could
cause the debug session to freeze. I'll be opening tickets for each one of
these issues, so that we don't forget to fix them by the final V2.1 release
(Re #1001307, Re #1001308, Re #1001310, Re #1001311).
Branch: platform/juno
Major refactoring of actor code in debugger
Extracted a common superclass (``BaseDebuggerActor``) for all actors defined in
the debugger module. This avoids duplication and makes sure that actors
terminates consistently. This base class for actors provides a number of
interesting functionalities:
- Automatic logging of all messages processed by the actor. This can be quite
because it generates a lot of noise. Before enabling it, we need to add a TRACE
log level in the logger (I'll open a ticket for this).
- Stackable behaviors. By calling `become/unbecome` an actor can easily
- Cleaner actor's life-cylce. Basically, when starting an actor, `postStart`
actor will process messages accordingly to its `behavior` implementation. If
an `Exit` or `PoisonPill` message is processed by `this` actor, the actor is
guaranteed to execute `preExit` before terminating.
Last, I have also added a number of FIXMEs for some problematic code that could
cause the debug session to freeze. I'll be opening tickets for each one of
these issues, so that we don't forget to fix them by the final V2.1 release
(Re #1001307, Re #1001308, Re #1001310, Re #1001311).
Branch: platform/juno
(In scala-ide:1b4ead35ec82b573c5cf097b669acc07323637b1) Replaced actor pulling by pushing
The states are stored in the class, the actor uses methods to request state changes.
Added regression tests.
Fix #1001308
Branch: master
The states are stored in the class, the actor uses methods to request state changes.
Added regression tests.
Fix #1001308
Branch: master
(In scala-ide:1b4ead35ec82b573c5cf097b669acc07323637b1) Replaced actor pulling by pushing
The states are stored in the class, the actor uses methods to request state changes.
Added regression tests.
Fix #1001308
Branch: platform/juno
The states are stored in the class, the actor uses methods to request state changes.
Added regression tests.
Fix #1001308
Branch: platform/juno