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 8989 - deadlock after modifier change triggers a data object transformation
Summary: deadlock after modifier change triggers a data object transformation
Status: CLOSED FIXED
Alias: None
Product: java
Classification: Unclassified
Component: Unsupported (show other bugs)
Version: 3.x
Hardware: Sun Solaris
: P2 critical (vote)
Assignee: issues@java
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2000-12-22 23:52 UTC by Rochelle Raccah
Modified: 2007-09-26 09:14 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 Rochelle Raccah 2000-12-22 23:52:17 UTC
What I'm trying to do is notice that the class modifier has changed and if the
new combination is illegal for my data object (a subclass of JavaDataObject),
convert it back into a regular JavaDataObject after confirmation by the user.
Doing this triggers a save/don't save/cancel dialog because the modifier has
changed and invalidating the data object calls canClose().  If Yes or No is
chosen on the Save dialog, there is a deadlock.  Here is the stack trace:
^\Full thread dump:

"OpenIDE Request Processor-1" daemon prio=1 tid=0x9adc80 nid=0xa5 waiting on
monitor [0xe9e01000..0xe9e01a30]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:521)

"Java Source Parsing" daemon prio=2 tid=0x6b98c0 nid=0x30 waiting on monitor
[0xe9f01000..0xe9f01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
javax.swing.text.AbstractDocument.readLock(AbstractDocument.java:1109)
        at org.netbeans.editor.BaseDocument.render(BaseDocument.java:726)
        at org.netbeans.modules.java.Util.getContent(Util.java:425)
        at
org.netbeans.modules.java.V8ParseRequest.getSource(V8ParseRequest.java:390)
        at
org.netbeans.modules.java.gj.ParserEngine.parseObject(ParserEngine.java:120)
        at
org.netbeans.modules.java.gj.JavaParserEngine.process(JavaParserEngine.java:73)
        at
org.netbeans.modules.java.V8ParseRequest.process(V8ParseRequest.java:340)
        at
org.netbeans.modules.java.SourceElementImpl$DataRef.run(SourceElementImpl.java:1285)
        at org.openide.util.Task.run(Task.java:124)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:562)

"Screen Updater" prio=5 tid=0x267658 nid=0x2f waiting on monitor
[0xea001000..0xea001a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at sun.awt.ScreenUpdater.nextEntry(ScreenUpdater.java:76)
        at sun.awt.ScreenUpdater.run(ScreenUpdater.java:95)

"XMLDataObject::Info" daemon prio=4 tid=0x9061d0 nid=0x2d waiting on monitor
[0xea101000..0xea101a30]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:521)

"Compilation" daemon prio=2 tid=0x8ffab8 nid=0x2b waiting on monitor
[0xea201000..0xea201a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.netbeans.core.compiler.CompilationEngineImpl$CompilerThread.nextJobAndTask(CompilationEngineImpl.java:160)
        at
org.netbeans.core.compiler.CompilationEngineImpl$CompilerThread.run(CompilationEngineImpl.java:182)

"Folder Instance Processor" daemon prio=5 tid=0x65f130 nid=0x2a waiting on
monitor [0xea301000..0xea301a30]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:521)

"Thread-13" prio=5 tid=0x714218 nid=0x26 waiting on monitor
[0xea401000..0xea401a30]
        at java.lang.Object.wait(Native Method)
        at
org.apache.tomcat.util.ThreadPool$MonitorRunnable.run(ThreadPool.java:390)
        at java.lang.Thread.run(Thread.java:484)

"Thread-12" prio=5 tid=0x7121f8 nid=0x25 runnable [0xea501000..0xea501a30]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:413)
        at java.net.ServerSocket.implAccept(ServerSocket.java:243)
        at java.net.ServerSocket.accept(ServerSocket.java:222)
        at
org.apache.tomcat.service.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:286)
        at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:402)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
        at java.lang.Thread.run(Thread.java:484)

"Thread-11" prio=5 tid=0x711718 nid=0x24 waiting on monitor
[0xea601000..0xea601a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-10" prio=5 tid=0x710c38 nid=0x23 waiting on monitor
[0xea701000..0xea701a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-9" prio=5 tid=0x710158 nid=0x22 waiting on monitor
[0xea801000..0xea801a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-8" prio=5 tid=0x70f6b0 nid=0x21 waiting on monitor
[0xea901000..0xea901a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-7" prio=5 tid=0x70ec08 nid=0x20 waiting on monitor
[0xeaa01000..0xeaa01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-6" prio=5 tid=0x6f7a68 nid=0x1f waiting on monitor
[0xeab01000..0xeab01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-5" prio=5 tid=0x6f1f00 nid=0x1e waiting on monitor
[0xeac01000..0xeac01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-4" prio=5 tid=0x6f1dd8 nid=0x1d waiting on monitor
[0xead01000..0xead01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"Thread-3" prio=5 tid=0x6f7c40 nid=0x1c waiting on monitor
[0xeae01000..0xeae01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:477)
        at java.lang.Thread.run(Thread.java:484)

"StandardManager" daemon prio=5 tid=0x6f2968 nid=0x1b waiting on monitor
[0xeaf01000..0xeaf01a30]
        at java.lang.Thread.sleep(Native Method)
        at
org.apache.tomcat.session.StandardManager.threadSleep(StandardManager.java:490)
        at
org.apache.tomcat.session.StandardManager.run(StandardManager.java:547)
        at java.lang.Thread.run(Thread.java:484)

"Thread-2" daemon prio=5 tid=0x6f03a0 nid=0x1a waiting on monitor
[0xeb001000..0xeb001a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at org.apache.tomcat.util.Queue.pull(Queue.java:89)
        at org.apache.tomcat.logging.LogDaemon$1.run(TomcatLogger.java:238)
        at org.apache.tomcat.logging.LogDaemon.run(TomcatLogger.java:254)

"TimerQueue" daemon prio=5 tid=0x3a0cb8 nid=0x18 waiting on monitor
[0xeb301000..0xeb301a30]
        at java.lang.Object.wait(Native Method)
        at javax.swing.TimerQueue.run(TimerQueue.java:233)
        at java.lang.Thread.run(Thread.java:484)

"RMI Request Processor" daemon prio=1 tid=0x3630e0 nid=0x17 waiting on monitor
[0xeb201000..0xeb201a30]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:521)

"Folder recognizer" daemon prio=5 tid=0x691588 nid=0x13 waiting on monitor
[0xeb401000..0xeb401a30]
        at java.lang.Object.wait(Native Method)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:521)

"jndi.refreshd" daemon prio=5 tid=0x652fb8 nid=0x11 waiting on monitor
[0xeb901000..0xeb901a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at org.netbeans.modules.jndi.utils.Refreshd.run(Refreshd.java:55)

"OpenIDE Request Processor-0" daemon prio=1 tid=0x3432f0 nid=0x10 waiting for
monitor entry [0xf1601000..0xf1601a30]
        at
org.openide.explorer.propertysheet.PropertySheet$RunNodes.run(PropertySheet.java:1194)
        at org.openide.util.Task.run(Task.java:124)
        at
org.openide.util.RequestProcessor$ProcessorThread.run(RequestProcessor.java:562)

"AWT-Motif" prio=6 tid=0x2b9788 nid=0xe runnable [0xf1801000..0xf1801a30]
        at sun.awt.motif.MToolkit.run(Native Method)
        at java.lang.Thread.run(Thread.java:484)

"SunToolkit.PostEventQueue-0" prio=6 tid=0x2af298 nid=0xd waiting on monitor
[0xf1901000..0xf1901a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at sun.awt.PostEventQueue.run(SunToolkit.java:497)

"AWT-EventQueue-0" prio=5 tid=0x2ae918 nid=0xc waiting on monitor
[0xf19fe000..0xf1a01a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at org.openide.util.Task.waitFinishedImpl(Task.java:82)
        at
org.openide.util.RequestProcessor$Task.waitFinishedImpl(RequestProcessor.java:377)
        at org.openide.util.Task.waitFinished(Task.java:71)
        at
org.netbeans.modules.java.SourceElementImpl.getData(SourceElementImpl.java:768)
        at
org.netbeans.modules.java.SourceElementImpl.getClasses(SourceElementImpl.java:432)
        at org.openide.src.SourceElement.getClasses(SourceElement.java:227)
        at org.openide.src.ClassElement.testFileForName(ClassElement.java:1034)
        at org.openide.src.ClassElement.forName(ClassElement.java:965)
        at
com.sun.forte4j.persistence.internal.model.DevelopmentModel.getClass(DevelopmentModel.java:315)
        at
com.sun.forte4j.persistence.internal.model.DevelopmentModel.getModifiers(DevelopmentModel.java:431)
        at
com.sun.forte4j.persistence.internal.model.Model.isPersistenceCapableAllowed(Model.java:414)
        at
com.sun.forte4j.persistence.internal.ui.modules.mapping.nodes.ClassFilterNode.getElementCanBePersistent(ClassFilterNode.java:164)
        at
com.sun.forte4j.persistence.internal.ui.modules.mapping.nodes.PersistenceFilterNode.handleElementPersistenceChange(PersistenceFilterNode.java:194)
        at
com.sun.forte4j.persistence.internal.ui.modules.mapping.nodes.PersistenceFilterNode.handleElementPropertyChange(PersistenceFilterNode.java:122)
        at
com.sun.forte4j.persistence.internal.ui.modules.mapping.nodes.ClassFilterNode.handleElementPropertyChange(ClassFilterNode.java:213)
        at
com.sun.forte4j.persistence.internal.ui.modules.mapping.nodes.PersistenceFilterNode$ElementPropertyChangeAdapter.propertyChange(PersistenceFilterNode.java:652)
        at
org.openide.nodes.FilterNode$PropertyChangeAdapter.propertyChange(FilterNode.java:635)
        at org.openide.nodes.Node.firePropertyChange(Node.java:498)
        at
org.openide.src.nodes.ElementNode.superPropertyChange(ElementNode.java:327)
        at
org.openide.src.nodes.ElementNode$ElementListener.propertyChange(ElementNode.java:390)
        at
org.openide.src.nodes.ClassElementNode$ClassElementListener.propertyChange(ClassElementNode.java:415)
        at
org.openide.util.WeakListener$PropertyChange.propertyChange(WeakListener.java:257)
        at
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:152)
        at
org.netbeans.modules.java.ElementImpl.firePropertyChange(ElementImpl.java:289)
        at
org.netbeans.modules.java.MemberElementImpl.setModifiers(MemberElementImpl.java:162)
        at org.openide.src.MemberElement.setModifiers(MemberElement.java:62)
        at
org.openide.src.nodes.MemberElementNode$3.run(MemberElementNode.java:117)
        at org.openide.src.nodes.ElementNode$1.run(ElementNode.java:440)
        at
org.netbeans.editor.BaseDocument.runAtomicAsUser(BaseDocument.java:753)
        at
org.netbeans.editor.GuardedDocument.runAtomicAsUser(GuardedDocument.java:237)
        at org.openide.text.NbDocument.runAtomicAsUser(NbDocument.java:299)
        at
org.netbeans.modules.java.SourceElementImpl.runAtomicAsUser(SourceElementImpl.java:568)
        at org.openide.src.SourceElement.runAtomicAsUser(SourceElement.java:287)
        at
org.openide.src.nodes.ElementNode$ElementProp.runAtomic(ElementNode.java:447)
        at
org.openide.src.nodes.MemberElementNode$2.setValue(MemberElementNode.java:115)
        at
org.openide.explorer.propertysheet.PropertyDetails.setPropertyValue(PropertyDetails.java:186)
        at
org.openide.explorer.propertysheet.PropertyDisplayer.setPropertyValue(PropertyDisplayer.java:766)
        at
org.openide.explorer.propertysheet.PropertyDialogManager$3.propertyChange(PropertyDialogManager.java:222)
        at
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:152)
        at
org.openide.explorer.propertysheet.editors.ModifierEditor$1.propertyChange(ModifierEditor.java:61)
        at
java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:152)
        at
org.openide.explorer.propertysheet.editors.ModifierPanel.updateValue(ModifierPanel.java:378)
        at
org.openide.explorer.propertysheet.editors.ModifierPanel.access$700(ModifierPanel.java:33)
        at
org.openide.explorer.propertysheet.editors.ModifierPanel$1.actionPerformed(ModifierPanel.java:147)
        at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1450)
        at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1504)
        at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:378)
        at
javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:268)
        at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:216)
        at java.awt.Component.processMouseEvent(Component.java:3715)
        at java.awt.Component.processEvent(Component.java:3544)
        at java.awt.Container.processEvent(Container.java:1165)
        at java.awt.Component.dispatchEventImpl(Component.java:2593)
        at java.awt.Container.dispatchEventImpl(Container.java:1214)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2452)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2217)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2126)
        at java.awt.Container.dispatchEventImpl(Container.java:1201)
        at java.awt.Window.dispatchEventImpl(Window.java:912)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:333)
        at
java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.Dialog.show(Dialog.java:370)
        at org.netbeans.core.NbPresenter.show(NbPresenter.java:458)
        at
org.openide.explorer.propertysheet.PropertyDisplayer$CustomPEListener.sheetButtonClicked(PropertyDisplayer.java:928)
        at
org.openide.explorer.propertysheet.SheetButton.notifySheetButtonListenersAboutClick(SheetButton.java:362)
        at
org.openide.explorer.propertysheet.SheetButton$InnerListener.mouseReleased(SheetButton.java:434)
        at
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:230)
        at java.awt.Component.processMouseEvent(Component.java:3715)
        at java.awt.Component.processEvent(Component.java:3544)
        at java.awt.Container.processEvent(Container.java:1165)
        at java.awt.Component.dispatchEventImpl(Component.java:2593)
        at java.awt.Container.dispatchEventImpl(Container.java:1214)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2452)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2217)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2126)
        at java.awt.Container.dispatchEventImpl(Container.java:1201)
        at java.awt.Window.dispatchEventImpl(Window.java:912)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:333)
        at
java.awt.EventDispatchThread.pumpOneEvent(EventDispatchThread.java:103)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:84)

"Thread-0" prio=5 tid=0x29538 nid=0x1 runnable [0..0xffbee178]

"Signal Dispatcher" daemon prio=10 tid=0x9aae0 nid=0x9 runnable [0..0]

"Finalizer" daemon prio=8 tid=0x97cc0 nid=0x7 waiting on monitor
[0xfd181000..0xfd181a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
        at
java.lang.ref.Finalizer$FinalizerWorker$FinalizerThread.run(Finalizer.java:120)

"Reference Handler" daemon prio=10 tid=0x96388 nid=0x6 waiting on monitor
[0xfd281000..0xfd281a30]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:420)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:129)

"VM Thread" prio=5 tid=0x95728 nid=0x4 runnable

"VM Periodic Task Thread" prio=10 tid=0x9a1f0 nid=0x8 waiting on monitor
Comment 1 Svata Dedic 2001-03-01 15:05:54 UTC
I think that the call chain leading to a deadlock is broken now. PropertyChangeEvents should now be fired _ONLY_ when no atomic lock is held on the source. PropertyChanges are collected during an atomic operation and queued and they are fired during last atomic unlock.
PropertyChangeEvents that are created during handling PC Event handling are appended at the end of the queue - the order of change events should exactly match the order of operations.

Please don't rely on that the events will be delivered by some specific thread; the event queue can be remapped to some dedicated event-firing thread in the future.
Comment 2 Jan Becicka 2001-05-09 16:55:10 UTC
[010508] Verified
Comment 3 Quality Engineering 2003-07-01 13:20:49 UTC
Resolved for 3.4.x or earlier, no new info since then -> closing.