Community
Participate
Working Groups
Many debug architectures require communicating with a remote debug target. The debug user interface needs to be robust in the face of latent and unreliable connections. To avoid blocking the user interface, the debug platform is exploiting the use of background jobs to perform operations and communicate with debuggers. As the opportunity for concurrent requests against debuggers increases, the platform must provide support for serializing conflicting requests against debuggers - for example a read operation to render a stack frame and a request that would invalidate the stack frame by resuming its thread. The debug platform needs to provide API and a set of guidlines to follow when scheduling concurrent operations and requests against debuggers.
Created attachment 16273 [details] patch in progress
Created attachment 16274 [details] patch in progress - debug.ui
Created attachment 16275 [details] patch in progress - jdt.debug
Created attachment 16276 [details] patch in progress - jdt.debug.ui
Created a branch with work in progress for these plug-ins: * org.eclipse.deubg.core * org.eclipse.deubg.ui * org.eclipse.jdt.deubg * org.eclipse.jdt.deubg.ui The branch name is r3_1_debug_concurrency_branch
Discoveries: * A debug model may already implement its own concurrency/thread safe support via synchronization/locking. When combined with the locks proposed in this feature request, two sets of locks are active which could cause deadlocks. I.e. the debug UI obtains a rule lock on a thread, and then needs VM lock on an object, while a debug element maintains a VM lock on an object and needs a rule lock. * Obtaining locks at the client (debug UI) end is very agressive. I.e. obtaining an access lock to generate a label is agressive since it is possible that the information is cached in the debug element, and requires no communication with the target. Only the model knows when/if communication/locking is required. * Obtaining locks has a performance hit. For each access, rather than an API call an adapter must be obtained, a rule generated, and a lock obtained on the rule, and then the API call followed by the release.
Marking as dup of plan item bug. *** This bug has been marked as a duplicate of 80152 ***