This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 236085 - Dead lock in LineTranslations.java prevent java code from openning
Summary: Dead lock in LineTranslations.java prevent java code from openning
Status: RESOLVED DUPLICATE of bug 236095
Alias: None
Product: debugger
Classification: Unclassified
Component: Java (show other bugs)
Version: 8.0
Hardware: PC Linux
: P3 normal (vote)
Assignee: Martin Entlicher
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-09-17 20:17 UTC by windli
Modified: 2013-09-18 09:36 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description windli 2013-09-17 20:17:24 UTC
Dead lock in LineTranslations.java prevent java code from openning.
Close netbeans with a lot of documents opened. Some of them have breakpoints in it.
Reopen netbeans, switch to a document with breakpoints. Sometime you will not able to open it. It's cased by dead lock in LineTranslations.java. 
org.netbeans.modules.debugger.jpda.projects.LineTranslations$BreakpointLineUpdater.attach(LineTranslations.java:435) locked the LineTranslations and try to open document. org.netbeans.modules.debugger.jpda.projects.LineTranslations$BreakpointLineUpdater.propertyChange(LineTranslations.java:514) try to inter synchronized statements which block then.

Stacks of the two threads:
org.openide.text Document Processing:

org.netbeans.modules.debugger.jpda.projects.LineTranslations$BreakpointLineUpdater.propertyChange(LineTranslations.java:514)
java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
org.openide.text.CloneableEditorSupport.firePropertyChange(CloneableEditorSupport.java:483)
org.openide.text.CloneableEditorSupport.fireDocumentChange(CloneableEditorSupport.java:1730)
org.openide.text.DocumentOpenClose$DocumentClose.run(DocumentOpenClose.java:1007)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1432)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2042)


org.openide.text Editor Initialization:
java.lang.Object.wait(Object.java)
java.lang.Object.wait(Object.java:503)
org.openide.util.Task.waitFinished(Task.java:135)
org.openide.util.RequestProcessor$Task.waitFinished(RequestProcessor.java:1686)
org.openide.text.DocumentOpenClose.open(DocumentOpenClose.java:256)
org.openide.text.CloneableEditorSupport.openDocument(CloneableEditorSupport.java:573)
org.openide.text.DataEditorSupport.openDocument(DataEditorSupport.java:587)
org.openide.text.PositionRef$Manager$OffsetKind.getLine(PositionRef.java:689)
org.openide.text.PositionRef.getLine(PositionRef.java:181)
org.openide.text.DocumentLine.getLineNumber(DocumentLine.java:123)
org.openide.text.DocumentLine.equals(DocumentLine.java:253)
java.util.WeakHashMap.eq(WeakHashMap.java:343)
java.util.WeakHashMap.get(WeakHashMap.java:468)
org.openide.text.Line$Set.registerLine(Line.java:562)
org.openide.text.DocumentLine$Set.access$201(DocumentLine.java:917)
org.openide.text.DocumentLine$Set$1DocumentRenderer.run(DocumentLine.java:1086)
org.openide.text.DocumentLine$Set.safelyRegisterLine(DocumentLine.java:1094)
org.openide.text.DocumentLine$Set.getCurrent(DocumentLine.java:1057)
org.netbeans.modules.debugger.jpda.projects.LineTranslations$BreakpointLineUpdater.attach(LineTranslations.java:435)
org.netbeans.modules.debugger.jpda.projects.LineTranslations.registerForLineUpdates(LineTranslations.java:321)
org.netbeans.modules.debugger.jpda.projects.BreakpointAnnotationProvider.breakpointAdded(BreakpointAnnotationProvider.java:200)
org.netbeans.api.debugger.DebuggerManager.fireBreakpointCreated(DebuggerManager.java:883)
org.netbeans.api.debugger.DebuggerManager.initBreakpoints(DebuggerManager.java:1055)
org.netbeans.api.debugger.DebuggerManager.initBreakpoints(DebuggerManager.java:959)
org.netbeans.api.debugger.DebuggerManager.getBreakpoints(DebuggerManager.java:597)
org.netbeans.modules.debugger.jpda.projects.BreakpointAnnotationProvider.annotate(BreakpointAnnotationProvider.java:158)
org.netbeans.modules.debugger.jpda.projects.BreakpointAnnotationProvider.annotate(BreakpointAnnotationProvider.java:147)
org.openide.text.CloneableEditorSupport.ensureAnnotationsLoaded(CloneableEditorSupport.java:392)
org.openide.text.CloneableEditorInitializer.initAnnotations(CloneableEditorInitializer.java:608)
org.openide.text.CloneableEditorInitializer.run(CloneableEditorInitializer.java:333)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1432)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2042)
Comment 1 windli 2013-09-17 20:18:04 UTC
Possible fix:
diff -r fb5899fd7e80 debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java
--- a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Tue Sep 17 12:03:48 2013 +0800
+++ b/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Wed Sep 18 03:53:11 2013 +0800
@@ -482,6 +482,9 @@
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             String propertyName = evt.getPropertyName();
+            if (EditorCookie.Observable.PROP_DOCUMENT.equals(propertyName)){
+                return;
+            }
             if (EditorCookie.Observable.PROP_OPENED_PANES.equals(propertyName)) {
                 DataEditorSupport des = dataObject.getLookup().lookup(DataEditorSupport.class);
                 JEditorPane[] openedPanes;
Comment 2 windli 2013-09-18 01:30:41 UTC
Ignore more events:

diff -r 762a1771e291 debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java
--- a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Wed Sep 18 04:18:34 2013 +0800
+++ b/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Wed Sep 18 09:15:59 2013 +0800
@@ -52,6 +52,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -478,10 +479,18 @@
                 }
             }
         }
-
+        final List<String> observedEvents = Arrays.asList(EditorCookie.Observable.PROP_OPENED_PANES
+                ,Line.PROP_LINE_NUMBER
+                ,Line.PROP_TEXT
+                ,LineBreakpoint.PROP_URL); //propertyChange handles only these events
+        
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             String propertyName = evt.getPropertyName();
+            if (observedEvents.contains(propertyName)){
+                return;
+            }
+            
            if (EditorCookie.Observable.PROP_OPENED_PANES.equals(propertyName)) {
                DataEditorSupport des = dataObject.getLookup().lookup(DataEditorSupport.class);
                JEditorPane[] openedPanes;
Comment 3 windli 2013-09-18 01:32:11 UTC
Sorry, not contains:
diff -r 762a1771e291 debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java
--- a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Wed Sep 18 04:18:34 2013 +0800
+++ b/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/LineTranslations.java	Wed Sep 18 09:15:59 2013 +0800
@@ -52,6 +52,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -478,10 +479,18 @@
                 }
             }
         }
-
+        final List<String> observedEvents = Arrays.asList(EditorCookie.Observable.PROP_OPENED_PANES
+                ,Line.PROP_LINE_NUMBER
+                ,Line.PROP_TEXT
+                ,LineBreakpoint.PROP_URL); //propertyChange handles only these events
+        
         @Override
         public void propertyChange(PropertyChangeEvent evt) {
             String propertyName = evt.getPropertyName();
+            if (!observedEvents.contains(propertyName)){
+                return;
+            }
+            
            if (EditorCookie.Observable.PROP_OPENED_PANES.equals(propertyName)) {
                DataEditorSupport des = dataObject.getLookup().lookup(DataEditorSupport.class);
                JEditorPane[] openedPanes;
Comment 4 Martin Entlicher 2013-09-18 09:36:46 UTC
This is a duplicate of issue #236095, where is a full thread dump with monitors attached.

*** This bug has been marked as a duplicate of bug 236095 ***