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 242455 - Deadlock with NB7.4 + JDK1.8.0
Summary: Deadlock with NB7.4 + JDK1.8.0
Status: RESOLVED FIXED
Alias: None
Product: guibuilder
Classification: Unclassified
Component: Code (show other bugs)
Version: 7.4
Hardware: PC Windows 7
: P3 normal (vote)
Assignee: issues@guibuilder
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-02-28 14:36 UTC by scanti
Modified: 2015-09-17 09:21 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
IDE log (99.00 KB, text/plain)
2014-02-28 14:36 UTC, scanti
Details
The threaddump (45.65 KB, text/plain)
2014-02-28 14:37 UTC, scanti
Details

Note You need to log in before you can comment on or make changes to this bug.
Description scanti 2014-02-28 14:36:28 UTC
I was testing JDK 1.8 and I switched from text to graphical view of a JPanel and NetBeans froze

Product Version = NetBeans IDE 7.4 (Build 201310111528)
Operating System = Windows 7 version 6.1 running on amd64
Java; VM; Vendor = 1.7.0_51
Runtime = Java HotSpot(TM) 64-Bit Server VM 24.51-b03
Comment 1 scanti 2014-02-28 14:36:37 UTC
Created attachment 145666 [details]
IDE log
Comment 2 scanti 2014-02-28 14:37:34 UTC
Attached thread dump
Comment 3 scanti 2014-02-28 14:37:41 UTC
Created attachment 145667 [details]
The threaddump
Comment 4 Marian Mirilovic 2014-03-03 12:52:03 UTC
BTW: NB 7.4 is not supported to run on JDK 8.0
Comment 5 Tomas Pavek 2015-09-16 17:19:40 UTC
The deadlock is:

"AWT-EventQueue-0" #22 prio=6 os_prio=0 tid=0x00000000259eb800 nid=0x1bc0 in Object.wait() [0x000000002ce9d000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.openide.util.Mutex$QueueCell.sleep(Mutex.java:1628)
	- locked <0x00000007482cb700> (a org.openide.util.Mutex$QueueCell)
	at org.openide.util.Mutex.enterImpl(Mutex.java:734)
	at org.openide.util.Mutex.enter(Mutex.java:641)
	at org.openide.util.Mutex.readEnter(Mutex.java:624)
	at org.openide.util.Mutex.readAccess(Mutex.java:334)
	at org.netbeans.api.project.ProjectManager.findProject(ProjectManager.java:235)
	at org.netbeans.modules.projectapi.SimpleFileOwnerQueryImplementation.getOwner(SimpleFileOwnerQueryImplementation.java:129)
	at org.netbeans.api.project.FileOwnerQuery.getOwner(FileOwnerQuery.java:102)
	at org.netbeans.modules.form.project.ClassPathUtils.getFormClassLoader(ClassPathUtils.java:136)
	at org.netbeans.modules.form.project.ClassPathUtils.loadClass(ClassPathUtils.java:114)
	at org.netbeans.modules.form.FormUtils.loadClass(FormUtils.java:1521)
	at org.netbeans.modules.form.PersistenceObjectRegistry.loadClass(PersistenceObjectRegistry.java:98)
	at org.netbeans.modules.form.GandalfPersistenceManager.getClassFromString(GandalfPersistenceManager.java:5724)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadAuxValues(GandalfPersistenceManager.java:2991)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:875)
	at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:824)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968)
	at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:824)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:503)
	at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:283)
	- locked <0x0000000662431e00> (a org.netbeans.modules.form.GandalfPersistenceManager)
	at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:352)
	at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:293)
	- locked <0x0000000640a5d740> (a javax.swing.MultiUIDefaults)
	- locked <0x000000064139d518> (a java.lang.Class for java.beans.Introspector)
	at org.openide.util.Mutex.doEventAccess(Mutex.java:1368)
	at org.openide.util.Mutex.readAccess(Mutex.java:327)
	at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276)
	at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:349)
	at org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:467)
	at org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:279)
	at org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:87)
	at org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:268)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
	at java.awt.EventQueue.access$400(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:697)
	at java.awt.EventQueue$3.run(EventQueue.java:691)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
	at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


"org.netbeans.modules.project.ui.OpenProjectList" #349 daemon prio=1 os_prio=-2 tid=0x000000002f985000 nid=0x13fc waiting for monitor entry [0x0000000047d4e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at java.util.Hashtable.get(Hashtable.java:362)
	- waiting to lock <0x0000000640a5d740> (a javax.swing.MultiUIDefaults)
	at javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:175)
	at javax.swing.UIDefaults.get(UIDefaults.java:163)
	at javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:58)
	at javax.swing.UIManager.get(UIManager.java:955)
	at org.openide.util.ImageUtilities.getImageIconFilter(ImageUtilities.java:181)
	at org.openide.util.ImageUtilities.loadImageIcon(ImageUtilities.java:172)
	at org.netbeans.modules.project.ant.AntBasedGenericType.getIcon(AntBasedGenericType.java:94)
	at org.netbeans.modules.project.ant.AntBasedProjectFactorySingleton.isProject2(AntBasedProjectFactorySingleton.java:205)
	at org.netbeans.api.project.ProjectManager.checkForProject(ProjectManager.java:524)
	at org.netbeans.api.project.ProjectManager.access$600(ProjectManager.java:86)
	at org.netbeans.api.project.ProjectManager$3.run(ProjectManager.java:477)
	- locked <0x0000000640f8ab48> (a java.util.WeakHashMap)
	at org.netbeans.api.project.ProjectManager$3.run(ProjectManager.java:451)
	at org.openide.util.Mutex.readAccess(Mutex.java:295)
	at org.netbeans.api.project.ProjectManager.isProject2(ProjectManager.java:451)
	at org.netbeans.api.project.ProjectManager.isProject2(ProjectManager.java:435)
	at org.netbeans.modules.project.ui.OpenProjectList$RecentProjectList$3$1.run(OpenProjectList.java:1579)
	at org.openide.util.Mutex.writeAccess(Mutex.java:479)
	at org.netbeans.modules.project.ui.OpenProjectList$RecentProjectList$3.run(OpenProjectList.java:1565)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1432)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2042)
Comment 6 Tomas Pavek 2015-09-16 17:26:30 UTC
Or at least I hope it is the case (that both thread go for the same project manager lock).

Form loading runs under MultiUIDefaults lock, project list opening under ProjectManager lock. During the operation both ask for the other lock.

Not sure how this could be fixed. Maybe if form could take the ProjectManager lock first and keep it during all the loading. But I'm not sure if it is accessible.
Comment 7 Tomas Pavek 2015-09-17 09:09:20 UTC
Looks like this can happen only with project that has an external source root and is still being opened when the GUI form is loaded (the result of ProjectManager.findProject is cached for later calls of file owner query).
Comment 8 Tomas Pavek 2015-09-17 09:21:28 UTC
This seems to be actually fixed already while ago in OpenProjectList: d772ac562107