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 62848 - Deadlock during update
Summary: Deadlock during update
Status: RESOLVED FIXED
Alias: None
Product: guibuilder
Classification: Unclassified
Component: Code (show other bugs)
Version: 5.x
Hardware: PC All
: P2 blocker (vote)
Assignee: issues@guibuilder
URL:
Keywords:
: 64610 (view as bug list)
Depends on:
Blocks:
 
Reported: 2005-08-23 12:54 UTC by Michal Skvor
Modified: 2005-11-08 17:18 UTC (History)
2 users (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 Michal Skvor 2005-08-23 12:54:05 UTC
Full thread dump Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode, sharing):
 
"Parsing Event Queue" daemon prio=1 tid=0x08808a40 nid=0x3020 waiting for
monitor entry [0xb122d000 ..0xb122d500]
        at
org.netbeans.modules.javacore.ExclusiveMutex.enter(ExclusiveMutex.java:118)
        - waiting to lock <0x842e35a8> (a
org.netbeans.modules.javacore.ExclusiveMutex)
        at
org.netbeans.mdr.NBMDRepositoryImpl.beginTrans(NBMDRepositoryImpl.java:227)
        at
org.netbeans.mdr.NBMDRepositoryImpl.getByMofId(NBMDRepositoryImpl.java:366)
        at org.netbeans.modules.javacore.JMManager$5.run(JMManager.java:1285)
        at org.openide.util.Task.run(Task.java:207)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:469)
        at
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:870)
 
"Inactive RequestProcessor thread
[Was:TimedSoftReference/org.openide.util.TimedSoftReference]" dae mon prio=1
tid=0x08632160 nid=0x301f in Object.wait() [0xaa9b6000..0xaa9b6580]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:823)
        - locked <0x86f2c4a8> (a java.lang.Object)
 
"Java Node State Updater" daemon prio=1 tid=0x0850d480 nid=0x301a in
Object.wait() [0xaa935000..0xa a935800]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:474)
        at javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1392)
        - locked <0x85909008> (a org.netbeans.modules.editor.NbEditorDocument)
        at org.netbeans.editor.BaseDocument.render(BaseDocument.java:1034)
        at
org.netbeans.modules.javacore.parser.ASTProvider.getRealSource(ASTProvider.java:190)
        at
org.netbeans.modules.javacore.parser.ASTProvider.getReader(ASTProvider.java:227)
        at
org.netbeans.modules.javacore.parser.ASTProvider.getSourceText(ASTProvider.java:464)
        at
org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.createMDRParser(ResourceImp
l.java:560)
        at
org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.directUpdate(ResourceImpl.j
ava:685)
        at
org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.checkUpToDate(ResourceImpl.
java:641)
        at
org.netbeans.modules.javacore.jmiimpl.javamodel.ResourceImpl.updateFromFileObject(Resour
ceImpl.java:450)
        at
org.netbeans.modules.javacore.RepositoryUpdater.createOrUpdateResource(RepositoryUpdater
.java:205)
        at
org.netbeans.modules.javacore.ExclusiveMutex.parseIfNeeded(ExclusiveMutex.java:252)
        at
org.netbeans.modules.javacore.ExclusiveMutex.enter(ExclusiveMutex.java:171)
        - locked <0x842e35a8> (a org.netbeans.modules.javacore.ExclusiveMutex)
        at
org.netbeans.mdr.NBMDRepositoryImpl.beginTrans(NBMDRepositoryImpl.java:227)
        at org.netbeans.modules.java.JavaNode.resolveIcons(JavaNode.java:576)
        at
org.netbeans.modules.java.JavaNode$StateUpdater.updateNodes(JavaNode.java:751)
        at org.netbeans.modules.java.JavaNode$StateUpdater.run(JavaNode.java:744)
        at org.openide.util.Task.run(Task.java:207)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:469)
        at
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:870)
 
"CVS: :pserver:ms93235@daning.sfbay.sun.com:/cvs/mobility" daemon prio=1
tid=0x08aad490 nid=0x2ffb in Object.wait() [0xab3be000..0xab3be500]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8374dfe8> (a java.awt.Component$AWTTreeLock)
        at java.lang.Object.wait(Object.java:474)
        at java.awt.Dialog.show(Dialog.java:545)
        - locked <0x8374dfe8> (a java.awt.Component$AWTTreeLock)
        at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:843)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:645)
        at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:616)
        at
org.netbeans.modules.versioning.system.cvss.ui.actions.update.UpdateExecutor.commandFini
shed(UpdateExecutor.java:129)
        at
org.netbeans.modules.versioning.system.cvss.ExecutorSupport.commandTerminated(ExecutorSu
pport.java:194)
        at
org.netbeans.modules.versioning.system.cvss.ClientRuntime$1.taskFinished(ClientRuntime.j
ava:142)
        at org.openide.util.Task.notifyFinished(Task.java:190)
        at org.openide.util.Task.run(Task.java:210)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:469)
        at
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:870)
 
"Text-Layout" prio=1 tid=0x08138718 nid=0x2f02 in Object.wait()
[0xa98ff000..0xa98ff580]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x84afd6b0> (a org.netbeans.editor.view.spi.ViewLayoutQueue)
        at java.lang.Object.wait(Object.java:474)
        at
org.netbeans.editor.view.spi.ViewLayoutQueue.waitForTask(ViewLayoutQueue.java:128)
        - locked <0x84afd6b0> (a org.netbeans.editor.view.spi.ViewLayoutQueue)
        at
org.netbeans.editor.view.spi.ViewLayoutQueue$LayoutThread.run(ViewLayoutQueue.java:182)
 
"DestroyJavaVM" prio=1 tid=0x0805c4b8 nid=0x2edc waiting on condition
[0x00000000..0xbfffd280]
 
"MDR event dispatcher" daemon prio=1 tid=0x08aec770 nid=0x2efe in Object.wait()
[0xaafff000..0xaaff f780]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x842e4358> (a java.util.LinkedList)
        at java.lang.Object.wait(Object.java:474)
        at
org.netbeans.mdr.util.EventNotifier$EventsDelivery.run(EventNotifier.java:257)
        - locked <0x842e4358> (a java.util.LinkedList)
        at java.lang.Thread.run(Thread.java:595)
 
"AWT-EventQueue-1" prio=1 tid=0x082e0db0 nid=0x2ef9 waiting for monitor entry
[0xb11ab000..0xb11ac5 80]
        at
org.netbeans.modules.javacore.ExclusiveMutex.enter(ExclusiveMutex.java:118)
        - waiting to lock <0x842e35a8> (a
org.netbeans.modules.javacore.ExclusiveMutex)
        at
org.netbeans.mdr.NBMDRepositoryImpl.beginTrans(NBMDRepositoryImpl.java:227)
        at org.netbeans.modules.javacore.JMManager.getResource(JMManager.java:566)
        at
org.netbeans.modules.javacore.api.JavaModel.getResource(JavaModel.java:94)
        at
org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.j
ava:263)
        at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:202)
        at org.netbeans.modules.form.FormLAF$1.run(FormLAF.java:58)
        - locked <0x83751eb0> (a javax.swing.MultiUIDefaults)
        at org.openide.util.Mutex.doEventAccess(Mutex.java:1146)
        at org.openide.util.Mutex.readAccess(Mutex.java:227)
        at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:43)
        at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:200)
        - locked <0x857cbdd8> (a
org.netbeans.modules.form.GandalfPersistenceManager)
        at
org.netbeans.modules.form.FormEditor.loadFormDesigner(FormEditor.java:129)
        at
org.netbeans.modules.form.FormDesigner.componentShowing(FormDesigner.java:1175)
        at
org.netbeans.core.multiview.MultiViewPeer.peerComponentShowing(MultiViewPeer.java:162)
        at
org.netbeans.core.multiview.MultiViewCloneableTopComponent.componentShowing(MultiViewClo
neableTopComponent.java:107)
        at
org.openide.windows.WindowManager.componentShowing(WindowManager.java:307)
        at
org.netbeans.core.windows.WindowManagerImpl.componentShowing(WindowManagerImpl.java:934)
        at
org.netbeans.core.windows.view.DefaultView.changeGUI(DefaultView.java:144)
        at
org.netbeans.core.windows.ViewRequestor.dispatchRequest(ViewRequestor.java:238)
        at
org.netbeans.core.windows.ViewRequestor.processRequest(ViewRequestor.java:214)
        at
org.netbeans.core.windows.ViewRequestor.postRequest(ViewRequestor.java:152)
        at
org.netbeans.core.windows.ViewRequestor.scheduleRequest(ViewRequestor.java:91)
        at
org.netbeans.core.windows.Central.activateModeTopComponent(Central.java:1377)
        at
org.netbeans.core.windows.WindowManagerImpl.topComponentRequestActive(WindowManagerImpl.
java:1004)
        at org.openide.windows.TopComponent.requestActive(TopComponent.java:592)
        at
org.netbeans.modules.form.FormEditorSupport$2.run(FormEditorSupport.java:283)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:153)
        at java.awt.Dialog$1.run(Dialog.java:515)
        at java.awt.Dialog.show(Dialog.java:536)
        at
org.netbeans.core.windows.services.NbPresenter.superShow(NbPresenter.java:800)
        at
org.netbeans.core.windows.services.NbPresenter.doShow(NbPresenter.java:843)
        at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:831)
        at org.openide.util.Mutex.doEventAccess(Mutex.java:1146)
        at org.openide.util.Mutex.readAccess(Mutex.java:183)
        at org.netbeans.core.windows.services.NbPresenter.show(NbPresenter.java:816)
        at java.awt.Component.show(Component.java:1300)
        at java.awt.Component.setVisible(Component.java:1253)
        at
org.netbeans.core.windows.services.DialogDisplayerImpl$1AWTQuery.showDialog(DialogDispla
yerImpl.java:156)
        at
org.netbeans.core.windows.services.DialogDisplayerImpl.notify(DialogDisplayerImpl.java:1
71)
        at
org.openide.text.CloneableEditorSupport.checkReload(CloneableEditorSupport.java:1822)
        at
org.openide.text.CloneableEditorSupport.access$1600(CloneableEditorSupport.java:84)
        at
org.openide.text.CloneableEditorSupport$Listener$1.run(CloneableEditorSupport.java:2309)
        at org.netbeans.editor.GuardedDocument.runAtomic(GuardedDocument.java:219)
        at org.openide.text.NbDocument.runAtomic(NbDocument.java:357)
        at
org.openide.text.CloneableEditorSupport$Listener$1.run(CloneableEditorSupport.java:2303)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:461)
        at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
 
"TimerQueue" daemon prio=1 tid=0x086034a8 nid=0x2ef8 in Object.wait()
[0xb1029000..0xb1029600]
        at java.lang.Object.wait(Native Method)
        at javax.swing.TimerQueue.run(TimerQueue.java:233)
        - locked <0x841e8000> (a javax.swing.TimerQueue)
        at java.lang.Thread.run(Thread.java:595)
 
"AWT-Shutdown" prio=1 tid=0x08186058 nid=0x2ef0 in Object.wait()
[0xb10aa000..0xb10aa580]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8371e108> (a java.lang.Object)
        at java.lang.Object.wait(Object.java:474)
        at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:259)
        - locked <0x8371e108> (a java.lang.Object)
        at java.lang.Thread.run(Thread.java:595)
 
"AWT-XAWT" daemon prio=1 tid=0x080c9940 nid=0x2eec runnable [0xb12ae000..0xb12ae780]
        at sun.awt.X11.XToolkit.waitForEvents(Native Method)
        at sun.awt.X11.XToolkit.run(XToolkit.java:463)
        at sun.awt.X11.XToolkit.run(XToolkit.java:438)
        at java.lang.Thread.run(Thread.java:595)
 
"Java2D Disposer" daemon prio=1 tid=0x08091be0 nid=0x2eeb in Object.wait()
[0xb13a6000..0xb13a6800]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x8369db20> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at sun.java2d.Disposer.run(Disposer.java:107)
        at java.lang.Thread.run(Thread.java:595)
 
"Active Reference Queue Daemon" daemon prio=1 tid=0x08094d50 nid=0x2eea in
Object.wait() [0xb164800 0..0xb1648480]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x8369dba8> (a java.lang.ref.ReferenceQueue$Lock)
        at org.openide.util.Utilities$ActiveQueue.run(Utilities.java:2968)
        at java.lang.Thread.run(Thread.java:595)
 
"Timer-0" daemon prio=1 tid=0x0838e5c0 nid=0x2ee9 in Object.wait()
[0xb16c9000..0xb16c9500]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x8369dc38> (a java.util.TaskQueue)
        at java.lang.Object.wait(Object.java:474)
        at java.util.TimerThread.mainLoop(Timer.java:483)
        - locked <0x8369dc38> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:462)
 
"CLI Requests Server" daemon prio=1 tid=0x08392940 nid=0x2ee7 runnable
[0xb17f6000..0xb17f6600]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
        - locked <0x8369dd08> (a java.net.SocksSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:450)
        at java.net.ServerSocket.accept(ServerSocket.java:421)
        at org.netbeans.CLIHandler$Server.run(CLIHandler.java:756)
 
"Low Memory Detector" daemon prio=1 tid=0x080a31a0 nid=0x2ee2 runnable
[0x00000000..0x00000000]
 
"CompilerThread0" daemon prio=1 tid=0x080a1c50 nid=0x2ee1 waiting on condition
[0x00000000..0xb2390 1e8]
 
"Signal Dispatcher" daemon prio=1 tid=0x080a0b58 nid=0x2ee0 waiting on condition
[0x00000000..0x000 00000]
 
"Finalizer" daemon prio=1 tid=0x0809a158 nid=0x2edf in Object.wait()
[0xb2692000..0xb2692500]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x8366c3e0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
 
"Reference Handler" daemon prio=1 tid=0x08099440 nid=0x2ede in Object.wait()
[0xb2713000..0xb271358 0]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:474)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x8366c1d8> (a java.lang.ref.Reference$Lock)
 
"VM Thread" prio=1 tid=0x08096950 nid=0x2edd runnable
 
"VM Periodic Task Thread" prio=1 tid=0x080a4630 nid=0x2ee3 waiting on condition
Comment 1 Martin Entlicher 2005-08-23 13:40:04 UTC
Please, next time, attach it as an attachment, this is a mess. Thanks.

Moving to java for evaluation...
Comment 2 Pavel Flaska 2005-09-19 09:40:40 UTC
*** Issue 64610 has been marked as a duplicate of this issue. ***
Comment 3 _ tboudreau 2005-09-19 13:50:17 UTC
Deadlock is not a P3.  Fix should be simple - invokelater the dialog, get it out
of runAtomic().
Comment 4 Pavel Flaska 2005-09-19 14:10:44 UTC
Yes, it is P2, I overlooked the priority. Fix is not simple - dialog cannot be
invoked later, because it is modal and has to block document reload.
Comment 5 Martin Matula 2005-09-29 14:10:59 UTC
The problem is in form editor. It accesses the MDR under the document lock (in
the GandalfPersistenceManager.loadForm()), wich is forbidden. Reassigning...
Comment 6 Jan Stola 2005-09-30 10:33:35 UTC
> The problem is in form editor. It accesses the MDR under the document lock
> (in the GandalfPersistenceManager.loadForm()), wich is forbidden.

This is a superficial evaluation.

The form must be loaded in AWT thread. We cannot do anything if the loading
is invoked in this thread when there is a modal dialog holding the mentioned
lock (note that even several invokeLaters doesn't help there). Reassigning
back. It is not a problem of form that there is a document lock - we
don't know anything about it.

BTW: It is a very poor practice to hold some lock in AWT thread for a long time
because you never know what is invoked there and the invoked tasks know
nothing about your lock.
Comment 7 Jan Becicka 2005-09-30 16:11:01 UTC
> BTW: It is a very poor practice to hold some lock in AWT thread for a long time
> because you never know what is invoked there and the invoked tasks know
> nothing about your lock.

Thanks for your deep evaluation, but it is not java, but form module who is
doing transaction in AWT. We agree that this is bad practice. We encourage JMI
clients not to do transactions in AWT thread. Form module is violating it.

Order off locking is declared: you cannot access MDR under document lock. It is
not java module who is holding document lock.
Comment 8 Jan Stola 2005-11-08 17:18:43 UTC
> Thanks for your deep evaluation, but it is not java, but form module who is
> doing transaction in AWT. We agree that this is bad practice. We encourage JMI
> clients not to do transactions in AWT thread. Form module is violating it.

You know, we are the form guys, we have to do things in AWT thread. ;-)

> Order off locking is declared: you cannot access MDR under document lock.

I can live with this rule if I know about the document lock, but the document
lock is held by someone else lower on the stack of the AWT thread !?!

> It is not java module who is holding document lock.

I agree that it (probably :) is not an issue of java module. I should have
reassigned it to openide/text, because the lock is held in
CloneableEditorSupport. Happily I don't have to do it. The part of code that
uncovered this problem has been rewritten (FormEditorSupport.java revision
1.180) and this deadlock should no longer occur.