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 126132 - Deadlock between AWT-EventQueue & Java Source Worker Thread
Summary: Deadlock between AWT-EventQueue & Java Source Worker Thread
Status: RESOLVED FIXED
Alias: None
Product: platform
Classification: Unclassified
Component: Progress (show other bugs)
Version: 6.x
Hardware: All All
: P1 blocker (vote)
Assignee: t_h
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-01-28 16:57 UTC by 5er_levart
Modified: 2008-12-22 10:56 UTC (History)
1 user (show)

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 5er_levart 2008-01-28 16:57:48 UTC
Everytime I quit NetBeans with Matise GUI builder in focus it gets deadlocked when I try to start it again next time.
The two offending threads are AWT-EventQueue which is waiting in a
org.netbeans.api.java.source.JavaSource.runUserActionTask method & Java Source Worker Thread which is trying to
initialize a org.netbeans.modules.progress.ui.StatusLineComponent. They get deadlocked on a UIDefaults Hashtable.

Following are the two offending thread dumps:

Name: Java Source Worker Thread
State: BLOCKED on javax.swing.MultiUIDefaults@c1a0a6 owned by: AWT-EventQueue-1
Total blocked: 1  Total waited: 2

Stack trace: 
java.util.Hashtable.get(Hashtable.java:333)
javax.swing.UIDefaults.getFromHashtable(UIDefaults.java:156)
javax.swing.UIDefaults.get(UIDefaults.java:144)
javax.swing.MultiUIDefaults.get(MultiUIDefaults.java:37)
javax.swing.UIDefaults.getUI(UIDefaults.java:734)
javax.swing.UIManager.getUI(UIManager.java:1014)
javax.swing.JPanel.updateUI(JPanel.java:109)
javax.swing.JPanel.<init>(JPanel.java:69)
javax.swing.JPanel.<init>(JPanel.java:92)
javax.swing.JPanel.<init>(JPanel.java:100)
org.netbeans.modules.progress.ui.StatusLineComponent.<init>(StatusLineComponent.java:120)
org.netbeans.modules.progress.ui.ProviderImpl.getDefaultWorker(ProviderImpl.java:59)
org.netbeans.progress.module.Controller.getDefault(Controller.java:105)
   - locked java.lang.Class@3e4a4
org.netbeans.progress.spi.InternalHandle.start(InternalHandle.java:216)
   - locked org.netbeans.progress.spi.InternalHandle@58c0be
org.netbeans.api.progress.ProgressHandle.start(ProgressHandle.java:94)
org.netbeans.api.progress.ProgressHandle.start(ProgressHandle.java:74)
org.netbeans.modules.java.source.usages.RepositoryUpdater$CompileWorker$1.run(RepositoryUpdater.java:1270)
org.netbeans.modules.java.source.usages.RepositoryUpdater$CompileWorker$1.run(RepositoryUpdater.java:1225)
org.netbeans.modules.java.source.usages.ClassIndexManager.writeLock(ClassIndexManager.java:100)
org.netbeans.modules.java.source.usages.RepositoryUpdater$CompileWorker.run(RepositoryUpdater.java:1222)
org.netbeans.modules.java.source.usages.RepositoryUpdater$CompileWorker.run(RepositoryUpdater.java:1187)
org.netbeans.api.java.source.JavaSource$CompilationJob.run(JavaSource.java:1457)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
java.util.concurrent.FutureTask.run(FutureTask.java:138)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)



and


Name: AWT-EventQueue-1
State: WAITING on java.util.concurrent.locks.ReentrantLock$FairSync@f89e13 owned by: Java Source Worker Thread
Total blocked: 364  Total waited: 200

Stack trace: 
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:747)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:778)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1114)
java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:201)
java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:262)
org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:581)
org.netbeans.modules.swingapp.AppFrameworkSupport.getAppClassNameFromFile(AppFrameworkSupport.java:365)
org.netbeans.modules.swingapp.AppFrameworkSupport.scanFolderForApplication(AppFrameworkSupport.java:343)
org.netbeans.modules.swingapp.AppFrameworkSupport.scanFolderForApplication(AppFrameworkSupport.java:351)
org.netbeans.modules.swingapp.AppFrameworkSupport.scanFolderForApplication(AppFrameworkSupport.java:351)
org.netbeans.modules.swingapp.AppFrameworkSupport.scanFolderForApplication(AppFrameworkSupport.java:351)
org.netbeans.modules.swingapp.AppFrameworkSupport.findApplicationClass(AppFrameworkSupport.java:328)
org.netbeans.modules.swingapp.AppFrameworkSupport.getApplicationClassName(AppFrameworkSupport.java:211)
org.netbeans.modules.swingapp.AppFrameworkSupport.getApplicationClassName(AppFrameworkSupport.java:170)
org.netbeans.modules.swingapp.ResourceUtils.createDesignResourceMap(ResourceUtils.java:95)
org.netbeans.modules.swingapp.ResourceUtils.getDesignResourceMap(ResourceUtils.java:126)
org.netbeans.modules.swingapp.ResourceServiceImpl.get(ResourceServiceImpl.java:90)
org.netbeans.modules.form.ResourceSupport.findResource0(ResourceSupport.java:775)
org.netbeans.modules.form.ResourceSupport.findResource(ResourceSupport.java:771)
org.netbeans.modules.form.ResourceSupport.findResource(ResourceSupport.java:767)
org.netbeans.modules.form.GandalfPersistenceManager.loadProperty(GandalfPersistenceManager.java:2063)
org.netbeans.modules.form.GandalfPersistenceManager.loadComponentProperties(GandalfPersistenceManager.java:1991)
org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:852)
org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:493)
org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:260)
org.netbeans.modules.form.FormEditor$3.run(FormEditor.java:297)
org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:232)
   - locked javax.swing.MultiUIDefaults@c1a0a6
org.openide.util.Mutex.doEventAccess(Mutex.java:1223)
org.openide.util.Mutex.readAccess(Mutex.java:284)
org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:217)
org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:295)
   - locked org.netbeans.modules.form.GandalfPersistenceManager@5ab76b
org.netbeans.modules.form.FormEditor.loadFormDesigner(FormEditor.java:211)
org.netbeans.modules.form.FormDesigner.componentShowing(FormDesigner.java:1739)
org.netbeans.core.multiview.MultiViewPeer.peerComponentShowing(MultiViewPeer.java:198)
org.netbeans.core.multiview.MultiViewCloneableTopComponent.componentShowing(MultiViewCloneableTopComponent.java:119)
org.openide.windows.WindowManager.componentShowing(WindowManager.java:330)
org.netbeans.core.windows.WindowManagerImpl.componentShowing(WindowManagerImpl.java:1016)
org.netbeans.core.windows.view.DefaultView.changeGUI(DefaultView.java:161)
org.netbeans.core.windows.ViewRequestor.dispatchRequest(ViewRequestor.java:269)
org.netbeans.core.windows.ViewRequestor.processVisibilityRequest(ViewRequestor.java:258)
org.netbeans.core.windows.ViewRequestor.postVisibilityRequest(ViewRequestor.java:195)
org.netbeans.core.windows.ViewRequestor.scheduleRequest(ViewRequestor.java:117)
org.netbeans.core.windows.Central.setVisible(Central.java:118)
org.netbeans.core.windows.WindowManagerImpl.setVisible(WindowManagerImpl.java:758)
org.netbeans.core.windows.WindowSystemImpl.show(WindowSystemImpl.java:87)
org.netbeans.core.NonGui$3.run(NonGui.java:210)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:284)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Comment 1 Marian Mirilovic 2008-02-19 20:58:23 UTC
5er_levart, 
thanks for your report. What is the NB/JDK build verion/number ?
Comment 2 Stanislav Aubrecht 2008-02-20 10:58:35 UTC
i suppose that Java Source Worker Thread should initialize swing components in EDT, reassigning.
Comment 3 Jan Lahoda 2008-02-20 12:21:53 UTC
The progress API is considered thread safe, to my knowledge. So it should not create components outside AWT Dispatch Thread.