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 113513 - Deadlock prone code in CompletionProviderImpl.compute()
Summary: Deadlock prone code in CompletionProviderImpl.compute()
Status: RESOLVED FIXED
Alias: None
Product: obsolete
Classification: Unclassified
Component: languages (show other bugs)
Version: 6.x
Hardware: All All
: P2 blocker (vote)
Assignee: Daniel Prusa
URL:
Keywords: T9Y
: 114212 (view as bug list)
Depends on:
Blocks:
 
Reported: 2007-08-22 15:02 UTC by Marek Fukala
Modified: 2007-08-30 19:21 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 Marek Fukala 2007-08-22 15:02:34 UTC
In the mentioned method you do basically:
doc.readLock();
try {
   ...
}catch(Exception) {
   resultSet.finish();
}finally{
   doc.readUnlock();
}

this is deadlock prone since the resultSet.finish() may directly attempt to get writeLock() for the document when there
is just one item and the instant substitution is enabled. See the following stacktrace. You shouldn't call the
resultSet.finish() under doc.readLock().

"AWT-EventQueue-2" prio=10 tid=0x087ff400 nid=0x1ecf in Object.wait() [0x85f6b000..0x85f6c1e0]
[ideTestRunner]    java.lang.Thread.State: WAITING (on object monitor)
[ideTestRunner]         at java.lang.Object.wait(Native Method)
[ideTestRunner]         - waiting on <0x8ba55e78> (a org.netbeans.modules.editor.NbEditorDocument)
[ideTestRunner]         at java.lang.Object.wait(Object.java:485)
[ideTestRunner]         at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1329)
[ideTestRunner]         - locked <0x8ba55e78> (a org.netbeans.modules.editor.NbEditorDocument)
[ideTestRunner]         at org.netbeans.editor.BaseDocument.extWriteLock(BaseDocument.java:1368)
[ideTestRunner]         - locked <0x8ba55e78> (a org.netbeans.modules.editor.NbEditorDocument)
[ideTestRunner]         at org.netbeans.editor.BaseDocument.atomicLock(BaseDocument.java:1403)
[ideTestRunner]         - locked <0x8ba55e78> (a org.netbeans.modules.editor.NbEditorDocument)
[ideTestRunner]         at
org.netbeans.editor.ext.html.HTMLCompletionQuery$HTMLResultItem.replaceText(HTMLCompletionQuery.java:545)
[ideTestRunner]         at
org.netbeans.editor.ext.html.HTMLCompletionQuery$TagItem.substituteText(HTMLCompletionQuery.java:771)
[ideTestRunner]         at
org.netbeans.editor.ext.html.HTMLCompletionQuery$HTMLResultItem.defaultAction(HTMLCompletionQuery.java:540)
[ideTestRunner]         at
org.netbeans.editor.ext.html.HTMLCompletionQuery$HTMLResultItem.instantSubstitution(HTMLCompletionQuery.java:514)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl$6.run(CompletionImpl.java:803)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.runInAWT(CompletionImpl.java:1325)
[ideTestRunner]         at
org.netbeans.modules.editor.completion.CompletionImpl.requestShowCompletionPane(CompletionImpl.java:827)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.finishNotify(CompletionImpl.java:1245)
[ideTestRunner]         at
org.netbeans.modules.editor.completion.CompletionResultSetImpl.finish(CompletionResultSetImpl.java:235)
[ideTestRunner]         at org.netbeans.spi.editor.completion.CompletionResultSet.finish(CompletionResultSet.java:204)
[ideTestRunner]         at
org.netbeans.modules.languages.features.CompletionProviderImpl$CompletionResult.finish(CompletionProviderImpl.java:521)
[ideTestRunner]         at
org.netbeans.modules.languages.features.CompletionProviderImpl$CompletionTaskImpl.addParserTags(CompletionProviderImpl.java:309)
[ideTestRunner]         at
org.netbeans.modules.languages.features.CompletionProviderImpl$CompletionTaskImpl.compute(CompletionProviderImpl.java:223)
[ideTestRunner]         at
org.netbeans.modules.languages.features.CompletionProviderImpl$CompletionTaskImpl.query(CompletionProviderImpl.java:167)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.queryResultSets(CompletionImpl.java:1431)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.completionQuery(CompletionImpl.java:570)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.showCompletion(CompletionImpl.java:726)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.access$2200(CompletionImpl.java:76)
[ideTestRunner]         at
org.netbeans.modules.editor.completion.CompletionImpl$CompletionShowAction.actionPerformed(CompletionImpl.java:1351)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.dispatchKeyEvent(CompletionImpl.java:496)
[ideTestRunner]         at org.netbeans.modules.editor.completion.CompletionImpl.keyPressed(CompletionImpl.java:325)
[ideTestRunner]         at java.awt.AWTEventMulticaster.keyPressed(AWTEventMulticaster.java:233)

...
Comment 1 Jindrich Sedek 2007-08-22 15:14:01 UTC
this issue blocks running qa-functional completion tests, please fix asap -> increasing priority
Comment 2 Daniel Prusa 2007-08-27 09:18:32 UTC
Fixed.

/cvs/languages/engine/src/org/netbeans/modules/languages/features/CompletionProviderImpl.java
new revision: 1.33; previous revision: 1.32
Comment 3 Marek Fukala 2007-08-30 10:34:22 UTC
*** Issue 114212 has been marked as a duplicate of this issue. ***
Comment 4 Martin Schovanek 2007-08-30 10:45:27 UTC
Still reproducible, see Issue 114212 , reopen.
Comment 5 Daniel Prusa 2007-08-30 19:21:39 UTC
Fixed for resultSet.finish() called in addParserTags() method.

/cvs/languages/engine/src/org/netbeans/modules/languages/features/CompletionProviderImpl.java
new revision: 1.35; previous revision: 1.34