Bug 215800 - Deadlock caused by TextDirectEditManager
Summary: Deadlock caused by TextDirectEditManager
Status: RESOLVED FIXED
Alias: None
Product: GMF-Runtime
Classification: Modeling
Component: General (show other bugs)
Version: unspecified   Edit
Hardware: PC Linux
: P3 critical
Target Milestone: 2.1   Edit
Assignee: Anthony Hunter CLA
QA Contact:
URL:
Whiteboard:
Keywords: contributed
Depends on:
Blocks:
 
Reported: 2008-01-18 09:31 EST by Yury Chernikov CLA
Modified: 2008-08-13 13:09 EDT (History)
8 users (show)

See Also:
Ed.Merks: pmc_approved+
richard.gronback: pmc_approved+
aboyko: review+
ahunter.eclipse: review+


Attachments
fixed sendMouseClick() method (1.74 KB, patch)
2008-04-29 09:22 EDT, Yury Chernikov CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Yury Chernikov CLA 2008-01-18 09:31:00 EST
Build ID: 20071213-1700

Steps To Reproduce:
1. Open Ecore Diagram editor
2. Create EClass
3. Create EAttribute
4. Select EAttribute, click on it once more, open inplace editor; select EClass
5. Repeat step "4" many times

Eclipse UI freeze.

More information:
Thread [main] (Suspended)	
	Display(Device).isDisposed() line: 681	
	Display.checkDevice() line: 698	
	Display.getSystemFont() line: 2183	
	FigureCanvas(Control).defaultFont() line: 92	
	FigureCanvas(Control).internal_new_GC(GCData) line: 2894	
	GC.gtk_new(Drawable, GCData) line: 193	
	FigureCanvas(Control).gtk_expose_event(long, long) line: 2646	
	FigureCanvas(Composite).gtk_expose_event(long, long) line: 667	
	FigureCanvas(Canvas).gtk_expose_event(long, long) line: 155	
	FigureCanvas(Widget).windowProc(long, long, long) line: 1494	
	FigureCanvas(Control).windowProc(long, long, long) line: 4429	
	Display.windowProc(long, long, long) line: 4026	
	OS._gtk_main_do_event(long) line: not available [native method]	
	OS.gtk_main_do_event(long) line: 5672	
	Display.eventProc(long, long) line: 1163	
	OS._gdk_window_process_updates(long, boolean) line: not available [native method]	
	OS.gdk_window_process_updates(long, boolean) line: 3629	
	FigureCanvas(Control).update(boolean, boolean) line: 4388	
	FigureCanvas(Control).update() line: 4379	
	NativeGraphicsSource.getGraphics(Rectangle) line: 43	
	DiagramGraphicalViewer$ToggleUpdateManager(DeferredUpdateManager).getGraphics(Rectangle) line: 136	
	DiagramGraphicalViewer$ToggleUpdateManager(DeferredUpdateManager).repairDamage() line: 286	
	DiagramGraphicalViewer$ToggleUpdateManager(DeferredUpdateManager).performUpdate() line: 179	
	DiagramGraphicalViewer$ToggleUpdateManager.performUpdate() line: 114	
	DeferredUpdateManager$UpdateRequest.run() line: 46	
	RunnableLock.run() line: 35	
	UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 130	
	Display.runAsyncMessages(boolean) line: 3312	
	Display.readAndDispatch() line: 2985	
	Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2381	
	Workbench.runUI() line: 2345	
	Workbench.access$4(Workbench) line: 2211	
	Workbench$4.run() line: 473	
	Realm.runWithDefault(Realm, Runnable) line: 288	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 468	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 106	
	EclipseAppHandle.run(Object) line: 193	
	EclipseAppLauncher.runApplication(Object) line: 106	
	EclipseAppLauncher.start(Object) line: 76	
	EclipseStarter.run(Object) line: 362	
	EclipseStarter.run(String[], Runnable) line: 175	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 585	
	Main.invokeFramework(String[], URL[]) line: 561	
	Main.basicRun(String[]) line: 501	
	Main.run(String[]) line: 1239	
	Main.main(String[]) line: 1215	


Thread [Thread-54] (Suspended)	
	Object.wait(long) line: not available [native method]	
	Lock(Object).wait() line: 474	
	Lock.lock() line: 34	
	OS.GDK_DISPLAY() line: 1069	
	Display.post(Event) line: 2853	
	TextDirectEditManager$4.run() line: 600
Comment 1 Yury Chernikov CLA 2008-04-29 09:22:48 EDT
Created attachment 97968 [details]
fixed sendMouseClick() method

similar request
https://bugs.eclipse.org/bugs/show_bug.cgi?id=204333

attached patch contains workaround of this problem
Comment 2 Yury Chernikov CLA 2008-06-06 09:49:45 EDT
Critical for Linux  users, easy to reproduce on generated diagrams
Comment 3 Anthony Hunter CLA 2008-06-06 12:52:52 EDT
I can duplicate this issue in Linux with was few as two clicks on the Ecore editor. The workbench is completely hung and never returns. 

I tried to duplicate this issue with our IBM application that also makes use of similar list compartments and attributes. I cannot get the application to hang, but it does go into "direct edit mode never starts again". I.e. I click many times and it never goes into direct edit mode. The only way to get into edit mode again is to F2 or go to another window and back again.

I am going to test a little more, but I am concerned putting this code in late into GMF 2.1. I do not want to risk breaking other platforms that are not reporting this issue. 

This particular code snippet (thread creation) has been there since GMF 1.0, but we did changed the code to use GEF label in GMF 2.1.

Steve / Dusko, can you try this issue and let me know what you think? 
Comment 4 Anthony Hunter CLA 2008-06-09 12:01:50 EDT
(In reply to comment #3)
> I tried to duplicate this issue with our IBM application that also makes use of
> similar list compartments and attributes. I cannot get the application to hang,
> but it does go into "direct edit mode never starts again". I.e. I click many
> times and it never goes into direct edit mode. The only way to get into edit
> mode again is to F2 or go to another window and back again.

I can duplicate this issue both with and without the patch on Windows on the Ecore diagram as well.

Take a class "EClass" with two attributes EAttribute1 and EAttribute2.

Three clicks on EAttribute1 brings you into direct edit mode (one to select and double click into edit mode). Then three clicks on EAttribute2 brings you into direct edit mode. If you go too fast with your triple click on EAttribute2, you will get into a state when can never get into direct edit mode on EAttribute2 unless you select something else and back again first, or F2.

It would seem that this issue is very hard to do with the patch, so I think we are safe to +1 the patch.

Abraham is testing for a second opinion.


Comment 5 Anthony Hunter CLA 2008-06-09 12:41:55 EDT
I tested on Linux with the Ecore diagram and the UI hang never happens. As well, the "direct edit mode never starts again" rarely happens (you need to click about 50 times or so).

I would say that this fix is safe to put in unless IBM thinks it will break stuff.
Comment 6 Anthony Hunter CLA 2008-06-10 11:20:23 EDT
Committed to HEAD.

We need approval before we can release into RC4.
Comment 7 Anthony Hunter CLA 2008-06-12 10:33:09 EDT
In RC4
Comment 8 Richard Gronback CLA 2008-08-13 13:09:57 EDT
[target cleanup] 2.1 RC was the original target milestone for this bug
Comment 9 Eclipse Webmaster CLA 2010-07-19 12:30:27 EDT
[GMF Restructure] Bug 319140 : product GMF and component Runtime Diagram was the original product and component for this bug