Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 328417 - EDC heavily relies on synchronous logic
Summary: EDC heavily relies on synchronous logic
Status: RESOLVED WONTFIX
Alias: None
Product: CDT
Classification: Tools
Component: cdt-debug-edc (show other bugs)
Version: 8.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 8.0   Edit
Assignee: Ken Ryall CLA
QA Contact: Ken Ryall CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-10-21 17:30 EDT by John Cortell CLA
Modified: 2019-12-30 18:39 EST (History)
3 users (show)

See Also:
john.cortell: review? (ken.ryall)


Attachments
Example of an ACMP transaction (26.09 KB, patch)
2010-10-21 17:42 EDT, John Cortell CLA
john.cortell: iplog-
Details | Diff
Example of ACPM transactions (64.91 KB, patch)
2010-10-27 18:54 EDT, John Cortell CLA
john.cortell: iplog-
Details | Diff
First draft; infrastructure for using DSF ACPM in EDC (62.38 KB, patch)
2010-11-04 19:41 EDT, John Cortell CLA
john.cortell: iplog-
Details | Diff
Sample and test ACPM transactions (65.54 KB, patch)
2010-11-04 19:43 EDT, John Cortell CLA
john.cortell: iplog-
Details | Diff
Phases 1 - 3 (99.59 KB, patch)
2010-12-14 15:24 EST, Ken Ryall CLA
ken.ryall: iplog-
Details | Diff
initial work rev 2 (139.24 KB, patch)
2011-01-04 12:00 EST, Ken Ryall CLA
ken.ryall: iplog-
Details | Diff
register service cleanup (52.29 KB, patch)
2011-01-04 17:03 EST, Ken Ryall CLA
ken.ryall: iplog-
Details | Diff
Use thread pool (item 4 in comment 13) (21.23 KB, patch)
2011-01-13 12:47 EST, John Cortell CLA
john.cortell: iplog-
Details | Diff
Use thread pool (item 4 in comment 13) (24.37 KB, patch)
2011-01-17 14:19 EST, John Cortell CLA
john.cortell: iplog-
Details | Diff
186941: Use thread pool (item 4 in comment 13) (31.02 KB, patch)
2011-01-17 17:56 EST, John Cortell CLA
john.cortell: iplog-
Details | Diff
186956: 186941: Use thread pool (item 4 in comment 13) (31.10 KB, patch)
2011-01-17 18:35 EST, John Cortell CLA
john.cortell: iplog-
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description John Cortell CLA 2010-10-21 17:30:56 EDT
EDC heavily makes use of synchronous wrappers to TCF services. This was done for convenience as the alternative has significant challenges. Asynchronous APIs are difficult to work with when 

   (a) an async top level operation requires many async 
       sub-operations blended into a lot of logic
   (b) an async operation is needed deep in the logic of a 
       large operation that is otherwise sync in nature. 

(a) is for the most part avoided in DSF-GDB since gdb has many commands that map nicely to DSF services. However, when implementing DSF services using low-level TCF services, implementing those service becomes very challenging.

EDC currently avoids this difficulty by using utility methods that provide a sync front end to what would otherwise be an async operation. The implementations of these utilities basically tie up the DSF executor thread waiting for an underlying TCF async operation to complete. Ken and I have discussed this and agree that this needs to be cleaned up.

One likely tool in this cleanup will be ACMP. This is a programming pattern that allows async gathering of information (a transaction) to be coded in a sync fashion. The transaction itself is asynchronous and none of the data points it gathers are actually obtained synchronously from their source. ACMP is basically a way to avoid having to write chunks of logic using explicit callbacks/RMs. It has other advantages as well.

Additionally, because of the need to sit-n-wait on asynchronous calls, EDC currently has to avoid using DSF services to implement DSF services. The reason is that code running on the DSF thread cannot make an asynch DSF request and wait for the result, for obvious reasons (the second request has no chance to run, since it requires the DSF thread, thus resulting in a deadlock). By removing the use of synchronous wrappers to TCF services, EDC will be able to use the DSF variants of those services instead of TCF ones, allowing the bridge between DSF and TCF to be streamlined.
Comment 1 John Cortell CLA 2010-10-21 17:42:58 EDT
Created attachment 181454 [details]
Example of an ACMP transaction

This patch adds a sandbox for experimenting with DSF ACMP. It also adds an example of a simple ACMP transaction.

The patch adds an ACMP top-level menu. The menu contains a single item at this point--an action that will get and display the value of register EIP (x86) in a dialog. This patch can be used to get a hands-on look at how ACMP can be used. It contains a very rough start to some infrastructure that would be needed for using ACMP in EDC. In fact, the infrastructure would not be unique to EDC...it would be useful for any DSF based debugger. However, for now I'll house it in EDC. We can look are relocating it later.

This patch is VERY ROUGH start. There are all sort of things that the code disregards, e.g., lifetime of ACMP cache objects. This is just a first step. When we've gotten enough of a rough-in, we should probably add the code to CVS to synchronize work on it. Moving it out of EDC will be a later consideration.
Comment 2 Pawel Piech CLA 2010-10-21 18:46:43 EDT
I like how the Asynchronous Cache Programming Model (ACPM) morphed into ACMP :-)
Comment 3 John Cortell CLA 2010-10-21 18:50:19 EDT
(In reply to comment #2)
> I like how the Asynchronous Cache Programming Model (ACPM) morphed into ACMP
> :-)

Isn't the evolution of human languages based on mistakes? ;-) My bad.
Comment 4 Pawel Piech CLA 2010-10-21 18:59:08 EDT
(In reply to comment #3)
> (In reply to comment #2)
> > I like how the Asynchronous Cache Programming Model (ACPM) morphed into ACMP
> > :-)
> 
> Isn't the evolution of human languages based on mistakes? ;-) My bad.

Yes! And just about anything would be better than ACPM.  How about CAMP  No wait!  Transaction Asynchronous Requests Programming (TARP)... ehm I guess someone used that one already :-P
Comment 5 John Cortell CLA 2010-10-21 20:22:02 EDT
(In reply to comment #4)
> Transaction Asynchronous Requests Programming (TARP)... 

The hairs on the back of my neck just stood up. Please, not that.
Comment 6 Doug Schaefer CLA 2010-10-21 20:45:34 EDT
Well, the PM is redundant. Just think Async Cache and you're good.
Comment 7 John Cortell CLA 2010-10-27 18:54:37 EDT
Created attachment 181896 [details]
Example of ACPM transactions

This patch is a snapshot of my ongoing work to make use of Pawel's ACPM DSF utilities within EDC. This is still just a series of contrived actions that run an ACPM transaction, in increased complexity. This snapshot includes a working cache manager and an initial use of Pawel's RangeCache. Still a lot of work to do here (and document). Posting this mostly for backup and to provide visibility to the progress I'm making.
Comment 8 John Cortell CLA 2010-11-04 19:41:49 EDT
Created attachment 182443 [details]
First draft; infrastructure for using DSF ACPM in EDC

This is a start. The next step is to try to make use of this infrastructure and replace the sync wrappers in EDC with ACPM transactions.
Comment 9 John Cortell CLA 2010-11-04 19:43:42 EDT
Created attachment 182444 [details]
Sample and test ACPM transactions

This will not be committed to the repository.
Comment 10 John Cortell CLA 2010-11-04 19:44:13 EDT
(In reply to comment #8)
> Created an attachment (id=182443) [details]
> First draft; infrastructure for using DSF ACPM in EDC
> 
> This is a start. The next step is to try to make use of this infrastructure and
> replace the sync wrappers in EDC with ACPM transactions.

I've committed this part to HEAD.
Comment 11 CDT Genie CLA 2010-11-04 20:23:01 EDT
*** cdt cvs genie on behalf of jcortell ***
Bug 328417: EDC heavily relies on synchronous logic

[+] INoop.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/INoop.java?root=Tools_Project&revision=1.1&view=markup
[+] Noop.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Noop.java?root=Tools_Project&revision=1.1&view=markup

[+] MemoryRangeCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/MemoryRangeCache.java?root=Tools_Project&revision=1.1&view=markup
[+] FormatedExpressionValueRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/FormatedExpressionValueRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] RegistersByNameRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/RegistersByNameRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] BaseRangeCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/BaseRangeCache.java?root=Tools_Project&revision=1.1&view=markup
[+] AbstractRegisterRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/AbstractRegisterRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] AvailableFormatsRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/AvailableFormatsRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] GetRegistersRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/GetRegistersRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] RegisterGroupsRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/RegisterGroupsRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] ICacheEntry.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/ICacheEntry.java?root=Tools_Project&revision=1.1&view=markup
[+] BaseRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/BaseRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] AbstractFormattedValuesRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/acpm/AbstractFormattedValuesRequestCache.java?root=Tools_Project&revision=1.1&view=markup

[+] NoopRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/acpm/NoopRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] LongNoopRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/acpm/LongNoopRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] LongRangeNoopRequestCache.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/acpm/LongRangeNoopRequestCache.java?root=Tools_Project&revision=1.1&view=markup
[+] CacheManager.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/acpm/CacheManager.java?root=Tools_Project&revision=1.1&view=markup

[*] DebugServicesFactory.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/launch/DebugServicesFactory.java?root=Tools_Project&r1=1.7&r2=1.8
[*] EDCLaunch.java 1.26 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/launch/EDCLaunch.java?root=Tools_Project&r1=1.25&r2=1.26
[+] ICacheManager.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/launch/ICacheManager.java?root=Tools_Project&revision=1.1&view=markup

[*] ServicesLaunchSequence.java 1.9 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/launch/ServicesLaunchSequence.java?root=Tools_Project&r1=1.8&r2=1.9

[*] MANIFEST.MF 1.21 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/META-INF/MANIFEST.MF?root=Tools_Project&r1=1.20&r2=1.21
Comment 12 CDT Genie CLA 2010-11-10 14:23:02 EST
*** cdt cvs genie on behalf of jcortell ***
Bug 328417: EDC heavily relies on synchronous logic (no longer need to remove canceled cache objects; 329481 keeps canceled cache objects in the invalid state, thus usable in a transaction).

[*] CacheManager.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/acpm/CacheManager.java?root=Tools_Project&r1=1.1&r2=1.2
Comment 13 Ken Ryall CLA 2010-12-14 15:17:32 EST
In order to resolve this issue I'm reworking all EDC operations that use the synchronous API to run on a separate EDC worker thread so they don't block the DSF executor thread. I'll attach patches as I go but I think it will fall into several phases:

1 - Have the EDC synchronous methods assert that they are not on the DSF thread.
2 - Convert code using the DsfServicesTracker to use a new IEDCServicesTracker that is thread safe. EDC services will implement IEDCServicesTracker to make code in one service that needs to find another very simple.
3 - Begin to run EDC operations by calling EDCDebugger.execute() instead of running them in the DSF thread.
4 - Use a thread pool for EDCDebugger.execute instead of the initial "use a new thread each time" implementation.
5 - Reorganize and document the EDC services so that the synchronous thread-safe EDC API is clearly distinct from the asynchronous implementation of the DSF service interfaces.
6 - Have the EDC synchronous methods throw exceptions in case of connection errors or timeout. This should root out the remaining cases where their usage needs to be handled differently at a higher level.
7 - Create unit tests that help validate the thread safety of the EDC synchronous methods. For example, create a large number of operations that compute the stack at the same time.
Comment 14 Ken Ryall CLA 2010-12-14 15:24:29 EST
Created attachment 185169 [details]
Phases 1 - 3

This is a big patch with a lot of little changes that touch on phases 1 - 3. Most relate to providing a simple, thread safe, way for code in EDC services to get a reference to another service. Use of DsfServicesTracker is replaced by IEDCServicesTracker. Each EDC service implements this interface and provides a getService implementation that wraps DsfServicesTracker and put the results into a thread safe cache.

Some EDC operations have been moved to EDCDebugger.execute instead of doing them directly in the DSF thread. The implementation of EDCDebugger.execute is simple and slow; it will be finished out in a later stage.
Comment 15 Ken Ryall CLA 2011-01-04 12:00:25 EST
Created attachment 186030 [details]
initial work rev 2

Here is an updated version of the initial work: A getService call has been added to the abstract EDC service. It's implementation will call a DsfServicesTracker unless the service requested is an EDC service, then it will use an EDCServicesTracker. The new EDCServicesTracker is a clone of DsfServicesTracker made thread safe so EDC services can easily find each other when running on any thread.
Comment 16 CDT Genie CLA 2011-01-04 12:23:05 EST
*** cdt cvs genie on behalf of kryall ***
Bug 328417 - EDC heavily relies on synchronous logic

[*] X86Stack.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.x86/src/org/eclipse/cdt/debug/edc/x86/X86Stack.java?root=Tools_Project&r1=1.12&r2=1.13

[+] Concurrent.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/Concurrent.java?root=Tools_Project&revision=1.1&view=markup
[*] ExpressionsCasting.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/ExpressionsCasting.java?root=Tools_Project&r1=1.5&r2=1.6

[*] TestUtils.java 1.15 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/tests/TestUtils.java?root=Tools_Project&r1=1.14&r2=1.15

[*] Breakpoints.java 1.25 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Breakpoints.java?root=Tools_Project&r1=1.24&r2=1.25
[*] RunControl.java 1.46 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/RunControl.java?root=Tools_Project&r1=1.45&r2=1.46
[*] Expressions.java 1.25 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java?root=Tools_Project&r1=1.24&r2=1.25
[*] Memory.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Memory.java?root=Tools_Project&r1=1.12&r2=1.13
[*] Symbols.java 1.14 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Symbols.java?root=Tools_Project&r1=1.13&r2=1.14

[*] IVariableLocation.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/symbols/IVariableLocation.java?root=Tools_Project&r1=1.5&r2=1.6
[*] VariableLocationFactory.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/symbols/VariableLocationFactory.java?root=Tools_Project&r1=1.1&r2=1.2
[*] TypeEngine.java 1.9 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/symbols/TypeEngine.java?root=Tools_Project&r1=1.8&r2=1.9
[*] ILocationProvider.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/symbols/ILocationProvider.java?root=Tools_Project&r1=1.3&r2=1.4

[*] ASTEvaluationEngine.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/eval/ast/engine/ASTEvaluationEngine.java?root=Tools_Project&r1=1.7&r2=1.8

[*] IFrameRegisterProvider.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/IFrameRegisterProvider.java?root=Tools_Project&r1=1.1&r2=1.2
[*] Stack.java 1.45 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java?root=Tools_Project&r1=1.44&r2=1.45
[+] IEDCService.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/IEDCService.java?root=Tools_Project&revision=1.1&view=markup
[*] DMContext.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/DMContext.java?root=Tools_Project&r1=1.2&r2=1.3
[+] EDCServicesTracker.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/EDCServicesTracker.java?root=Tools_Project&revision=1.1&view=markup
[*] IEDCSymbols.java 1.5 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/IEDCSymbols.java?root=Tools_Project&r1=1.4&r2=1.5
[*] IEDCModules.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/IEDCModules.java?root=Tools_Project&r1=1.2&r2=1.3
[*] IEDCMemory.java 1.3 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/IEDCMemory.java?root=Tools_Project&r1=1.2&r2=1.3
[*] AbstractEDCService.java 1.5 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/AbstractEDCService.java?root=Tools_Project&r1=1.4&r2=1.5

[*] FormatUtils.java 1.21 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/formatter/FormatUtils.java?root=Tools_Project&r1=1.20&r2=1.21

[*] Interpreter.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/eval/ast/engine/instructions/Interpreter.java?root=Tools_Project&r1=1.5&r2=1.6
[*] VariableWithValue.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/eval/ast/engine/instructions/VariableWithValue.java?root=Tools_Project&r1=1.12&r2=1.13
[*] OperandValue.java 1.7 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/eval/ast/engine/instructions/OperandValue.java?root=Tools_Project&r1=1.6&r2=1.7
[*] EvaluateID.java 1.17 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/eval/ast/engine/instructions/EvaluateID.java?root=Tools_Project&r1=1.16&r2=1.17

[*] LocationList.java 1.10 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/LocationList.java?root=Tools_Project&r1=1.9&r2=1.10
[*] LocationExpression.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/LocationExpression.java?root=Tools_Project&r1=1.12&r2=1.13
[*] DwarfFrameRegisterProvider.java 1.7 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfFrameRegisterProvider.java?root=Tools_Project&r1=1.6&r2=1.7
[*] DwarfFrameRegisters.java 1.7 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/dwarf/DwarfFrameRegisters.java?root=Tools_Project&r1=1.6&r2=1.7

[*] RegisterVariableLocation.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/RegisterVariableLocation.java?root=Tools_Project&r1=1.7&r2=1.8
[*] InvalidVariableLocation.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/InvalidVariableLocation.java?root=Tools_Project&r1=1.7&r2=1.8
[*] RegisterOffsetVariableLocation.java 1.5 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/RegisterOffsetVariableLocation.java?root=Tools_Project&r1=1.4&r2=1.5
[*] MemoryVariableLocation.java 1.14 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/MemoryVariableLocation.java?root=Tools_Project&r1=1.13&r2=1.14
[*] ValueVariableLocation.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/symbols/ValueVariableLocation.java?root=Tools_Project&r1=1.7&r2=1.8

[*] EDCDebugger.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java?root=Tools_Project&r1=1.5&r2=1.6
Comment 17 Ken Ryall CLA 2011-01-04 17:03:37 EST
Created attachment 186055 [details]
register service cleanup

Next step, cleaned up the registers service to throw exceptions when it can't get data from the agent.
Comment 18 CDT Genie CLA 2011-01-04 17:23:03 EST
*** cdt cvs genie on behalf of kryall ***
Bug 328417 - EDC heavily relies on synchronous logic

[*] Concurrent.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/Concurrent.java?root=Tools_Project&r1=1.1&r2=1.2
[*] RegisterView.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/RegisterView.java?root=Tools_Project&r1=1.3&r2=1.4
[*] Terminating.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/Terminating.java?root=Tools_Project&r1=1.3&r2=1.4
[*] MemoryView.java 1.5 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/MemoryView.java?root=Tools_Project&r1=1.4&r2=1.5

[*] AbstractLaunchTest.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/tests/AbstractLaunchTest.java?root=Tools_Project&r1=1.5&r2=1.6
[*] TestUtils.java 1.16 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/tests/TestUtils.java?root=Tools_Project&r1=1.15&r2=1.16

[*] ARMStack.java 1.16 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.arm/src/org/eclipse/cdt/debug/edc/internal/arm/ARMStack.java?root=Tools_Project&r1=1.15&r2=1.16
[*] TargetEnvironmentARM.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.arm/src/org/eclipse/cdt/debug/edc/internal/arm/TargetEnvironmentARM.java?root=Tools_Project&r1=1.12&r2=1.13

[*] RunControl.java 1.47 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/RunControl.java?root=Tools_Project&r1=1.46&r2=1.47

[*] Album.java 1.23 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Album.java?root=Tools_Project&r1=1.22&r2=1.23
[*] Snapshot.java 1.13 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/snapshot/Snapshot.java?root=Tools_Project&r1=1.12&r2=1.13

[*] MessageLogger.java 1.5 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/MessageLogger.java?root=Tools_Project&r1=1.4&r2=1.5

[*] ISnapshotContributor.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/snapshot/ISnapshotContributor.java?root=Tools_Project&r1=1.3&r2=1.4

[*] Stack.java 1.46 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java?root=Tools_Project&r1=1.45&r2=1.46
[*] Registers.java 1.19 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Registers.java?root=Tools_Project&r1=1.18&r2=1.19

[*] EDC.java 1.11 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/scripting/EDC.java?root=Tools_Project&r1=1.10&r2=1.11
[*] DOMUtils.java 1.8 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/scripting/DOMUtils.java?root=Tools_Project&r1=1.7&r2=1.8
Comment 19 John Cortell CLA 2011-01-13 12:47:01 EST
Created attachment 186765 [details]
Use thread pool (item 4 in comment 13)

This introduces the use of a thread pool. See comments in code.
Comment 20 John Cortell CLA 2011-01-17 14:19:38 EST
Created attachment 186941 [details]
Use thread pool (item 4 in comment 13)

Updated patch (given Ken's latest commit to HEAD)
Comment 21 John Cortell CLA 2011-01-17 17:56:38 EST
Created attachment 186956 [details]
186941: Use thread pool (item 4 in comment 13)

Enhanced Concurrent test case. Also removed temporary code accidentally left in.
Comment 22 John Cortell CLA 2011-01-17 18:35:55 EST
Created attachment 186959 [details]
186956: 186941: Use thread pool (item 4 in comment 13)

Improved failure reporting in test case.
Comment 23 Ken Ryall CLA 2011-01-18 14:42:09 EST
(In reply to comment #22)
> Created attachment 186959 [details]
> 186956: 186941: Use thread pool (item 4 in comment 13)
> 
> Improved failure reporting in test case.

The patch looks great, please commit it and I'll update to it before committing my changes to the Registers service.
Comment 24 CDT Genie CLA 2011-01-18 17:23:02 EST
*** cdt cvs genie on behalf of jcortell ***
Bug 328417:  EDC heavily relies on synchronous logic. Added use of a thread-pool and extended the concurrency test.

[*] Concurrent.java 1.4 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc.tests/src/org/eclipse/cdt/debug/edc/debugger/tests/Concurrent.java?root=Tools_Project&r1=1.3&r2=1.4

[*] INoop.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/INoop.java?root=Tools_Project&r1=1.1&r2=1.2
[*] Noop.java 1.2 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Noop.java?root=Tools_Project&r1=1.1&r2=1.2
[*] Expressions.java 1.26 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Expressions.java?root=Tools_Project&r1=1.25&r2=1.26
[*] Memory.java 1.16 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/Memory.java?root=Tools_Project&r1=1.15&r2=1.16
[*] RunControl.java 1.49 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/services/dsf/RunControl.java?root=Tools_Project&r1=1.48&r2=1.49

[+] messages.properties  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/messages.properties?root=Tools_Project&revision=1.1&view=markup
[*] Stack.java 1.48 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Stack.java?root=Tools_Project&r1=1.47&r2=1.48
[*] AbstractEDCService.java 1.6 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/AbstractEDCService.java?root=Tools_Project&r1=1.5&r2=1.6
[+] Messages.java  http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/services/Messages.java?root=Tools_Project&revision=1.1&view=markup

[*] EDCLaunch.java 1.31 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/launch/EDCLaunch.java?root=Tools_Project&r1=1.30&r2=1.31

[*] EDCDebugger.java 1.7 http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.cdt/edc/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java?root=Tools_Project&r1=1.6&r2=1.7
Comment 25 Ken Ryall CLA 2011-01-25 11:37:24 EST
I committed a clean up of the Registers service, fixed up code for Eclipse 3.7 build errors and shored up the unit tests.
Comment 26 Jonah Graham CLA 2019-12-30 18:39:58 EST
(this is part of a batch change)

The Eclipse CDT EDC (https://wiki.eclipse.org/CDT/cdt-debug-edc) is now obsolete and has not had any active development since 2011. Therefore the still open bugs are being marked as wontfix.

The git repo for the project still exists for posterity at https://git.eclipse.org/c/cdt/org.eclipse.cdt.edc.git/