[
https://issues.apache.org/jira/browse/NETBEANS-4308?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matthias Bläsing resolved NETBEANS-4308.
----------------------------------------
Fix Version/s: 12.1
Resolution: Fixed
> Deadlock in DB Editor
> ---------------------
>
> Key: NETBEANS-4308
> URL: https://issues.apache.org/jira/browse/NETBEANS-4308
> Project: NetBeans
> Issue Type: Bug
> Components: db - Code
> Affects Versions: 11.2
> Reporter: Matthias Bläsing
> Assignee: Matthias Bläsing
> Priority: Major
> Fix For: 12.1
>
> Attachments: threaddump.txt
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> Observed on Windows was, that netbeans froze after closing the SQL editor
> window. With visualvm a threaddump could be generated (attached). The
> relevant part:
> {noformat}
> "AWT-EventQueue-0" #24 prio=6 os_prio=0 cpu=21437.50ms elapsed=1431.16s
> tid=0x000000002acf8000 nid=0x4cf0 in Object.wait() [0x000000002ce59000]
> java.lang.Thread.State: WAITING (on object monitor)
> at java.lang.Object.wait([email protected]/Native Method)
> - waiting on <no object reference available>
> at java.lang.Object.wait([email protected]/Object.java:328)
> at org.openide.util.Task.waitFinished(Task.java:110)
> - waiting to re-lock in wait() <0x00000000e5da9c40> (a
> org.openide.util.RequestProcessor$Task)
> at
> org.openide.util.RequestProcessor$Task.waitFinished(RequestProcessor.java:1672)
> at
> org.openide.text.DocumentOpenClose.waitForCloseFinish(DocumentOpenClose.java:283)
> at
> org.openide.text.DocumentOpenClose.isDocumentLoadedOrLoading(DocumentOpenClose.java:289)
> at
> org.openide.text.CloneableEditorSupport.isDocumentLoaded(CloneableEditorSupport.java:1202)
> at
> org.openide.text.EditorSupportLineSet$SupportLine.show(EditorSupportLineSet.java:82)
> at
> org.netbeans.modules.db.sql.loader.SQLExecutionLoggerImpl$Hyperlink.goToLine(SQLExecutionLoggerImpl.java:275)
> at
> org.netbeans.modules.db.sql.loader.SQLExecutionLoggerImpl$Hyperlink.outputLineSelected(SQLExecutionLoggerImpl.java:260)
> at
> org.netbeans.core.output2.OutputTab.caretPosChanged(OutputTab.java:401)
> at
> org.netbeans.core.output2.OutputPane.caretPosChanged(OutputPane.java:52)
> at
> org.netbeans.core.output2.ui.AbstractOutputPane.maybeSendCaretEnteredLine(AbstractOutputPane.java:580)
> at
> org.netbeans.core.output2.ui.AbstractOutputPane.stateChanged(AbstractOutputPane.java:556)
> at
> javax.swing.text.DefaultCaret.fireStateChanged([email protected]/DefaultCaret.java:812)
> at
> javax.swing.text.DefaultCaret.changeCaretPosition([email protected]/DefaultCaret.java:1283)
> at
> javax.swing.text.DefaultCaret.handleSetDot([email protected]/DefaultCaret.java:1182)
> at
> javax.swing.text.DefaultCaret.setDot([email protected]/DefaultCaret.java:1163)
> at
> javax.swing.text.DefaultCaret.setDot([email protected]/DefaultCaret.java:1060)
> at
> javax.swing.text.DefaultCaret$Handler.propertyChange([email protected]/DefaultCaret.java:1883)
> at
> java.beans.PropertyChangeSupport.fire([email protected]/PropertyChangeSupport.java:341)
> at
> java.beans.PropertyChangeSupport.firePropertyChange([email protected]/PropertyChangeSupport.java:333)
> at
> java.beans.PropertyChangeSupport.firePropertyChange([email protected]/PropertyChangeSupport.java:266)
> at
> java.awt.Component.firePropertyChange([email protected]/Component.java:8728)
> at
> javax.swing.text.JTextComponent.setDocument([email protected]/JTextComponent.java:456)
> at
> org.netbeans.core.output2.OutputPane.setDocument(OutputPane.java:109)
> at
> org.netbeans.core.output2.ui.AbstractOutputTab.setDocument(AbstractOutputTab.java:58)
> at org.netbeans.core.output2.OutputTab.setDocument(OutputTab.java:166)
> at org.netbeans.core.output2.OutputTab.closed(OutputTab.java:341)
> at
> org.netbeans.core.io.ui.IOWindow$IOWindowImpl.removeTab(IOWindow.java:357)
> at org.netbeans.core.io.ui.IOWindow.remove(IOWindow.java:98)
> at org.openide.windows.IOContainer.remove(IOContainer.java:139)
> at
> org.netbeans.core.output2.Controller.performCommand(Controller.java:356)
> at
> org.netbeans.core.output2.Controller.eventDispatched(Controller.java:83)
> at org.netbeans.core.output2.IOEvent.dispatch(IOEvent.java:256)
> at org.netbeans.core.output2.NbIO.post(NbIO.java:271)
> at org.netbeans.core.output2.NbIO.post(NbIO.java:260)
> at org.netbeans.core.output2.NbIO.closeInputOutput(NbIO.java:100)
> at
> org.netbeans.modules.db.sql.loader.SQLExecutionLoggerImpl.close(SQLExecutionLoggerImpl.java:99)
> at
> org.netbeans.modules.db.sql.loader.SQLEditorSupport.closeLogger(SQLEditorSupport.java:487)
> - locked <0x00000000ccf40d10> (a java.lang.Object)
> - locked <0x00000000ccf3f7b0> (a
> org.netbeans.modules.db.sql.loader.SQLEditorSupport)
> at
> org.netbeans.modules.db.sql.loader.SQLEditorSupport.notifyClosed(SQLEditorSupport.java:251)
> at
> org.openide.text.CloneableEditor.closeLast(CloneableEditor.java:341)
> - locked <0x00000000ccf7a0a0> (a [Z)
> at
> org.netbeans.modules.db.sql.loader.SQLCloneableEditor.closeLast(SQLCloneableEditor.java:588)
> [...]
> Locked ownable synchronizers:
> - None
> "org.openide.text Document Processing" #135 daemon prio=1 os_prio=-2
> cpu=31.25ms elapsed=97.70s tid=0x000000003ee8c800 nid=0x4514 waiting for
> monitor entry [0x0000000060dae000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at
> org.openide.text.CloneableEditorSupport.getUndoRedo(CloneableEditorSupport.java:326)
> - waiting to lock <0x00000000ccf3f7b0> (a
> org.netbeans.modules.db.sql.loader.SQLEditorSupport)
> at
> org.openide.text.DocumentOpenClose$DocumentClose.readLockedRun(DocumentOpenClose.java:992)
> at
> org.openide.text.DocumentOpenClose$DocumentClose.run(DocumentOpenClose.java:939)
> at org.netbeans.editor.BaseDocument.render(BaseDocument.java:1402)
> at
> org.openide.text.DocumentOpenClose$DocumentClose.run(DocumentOpenClose.java:958)
> at
> org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)
> at
> org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
> at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
> at
> org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
> Locked ownable synchronizers:
> - None
> {noformat}
> So the SQLEditorSupport monitor is held by the EDT, during the closing
> operation a task is created that is dispatched to a request processor, that
> task needs to acquire the monitor on SQLEditorSupport and the processing in
> the EDT waits for the task to finish.
> Possible solution: remove the synchronization in
> SQLEditorSupport#closeLogger. The cirtical part (ensuring logger is not
> closed while it could be acquired) is protected by the finer grained
> oggerLock` and thus the monitor of SQLEditorSupport is not needed.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists