briandealwis / ferret

An Eclipse plugin providing automatic structured information about the local context of the selected program elements.
Other
7 stars 2 forks source link

Deadlock #49

Open briandealwis opened 7 years ago

briandealwis commented 7 years ago

In Oxygen/4.7. Looks like ca.ubc.cs.ferret.Consultancy.isInProgress() shouldn't be synchronized.

"pool-3-thread-1" #5175 prio=5 os_prio=31 tid=0x000000012c038800 nid=0x17bef waiting for monitor entry [0x000070000adef000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at ca.ubc.cs.ferret.model.Consultation.reset(Consultation.java:62)
    - waiting to lock <0x0000000756d4b1e0> (a ca.ubc.cs.ferret.model.Consultation)
    at ca.ubc.cs.ferret.Consultancy.reset(Consultancy.java:197)
    - locked <0x000000075060d6b8> (a ca.ubc.cs.ferret.Consultancy)
    at ca.ubc.cs.ferret.Consultancy$2.run(Consultancy.java:175)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

"Worker-237" #7928 prio=5 os_prio=31 tid=0x00000001010cf000 nid=0x26ef7 in Object.wait() [0x000070000e9d6000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:39)
    - locked <0x000000078d23b1e8> (a org.eclipse.core.internal.jobs.Semaphore)
    at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:908)
    at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:345)
    at org.eclipse.core.runtime.jobs.Job.join(Job.java:582)
    at org.eclipse.jdt.internal.core.nd.indexer.Indexer.waitForIndex(Indexer.java:997)
    at org.eclipse.jdt.internal.core.nd.indexer.Indexer.waitForIndex(Indexer.java:1015)
    at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.newSearchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:498)
    at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.searchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:483)
    at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.determinePossibleSubTypes(IndexBasedHierarchyBuilder.java:440)
    at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:152)
    at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:319)
    at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1291)
    - locked <0x000000078d2aa020> (a org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy)
    at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90)
    at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:724)
    at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:790)
    at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:920)
    at org.eclipse.jdt.internal.core.BinaryType.newTypeHierarchy(BinaryType.java:878)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper$5.call(JavaModelHelper.java:855)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper$5.call(JavaModelHelper.java:1)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.performCreation(JavaModelHelper.java:310)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveOperation(JavaModelHelper.java:256)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveCache(JavaModelHelper.java:293)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.getSubTypeHierarchyFor(JavaModelHelper.java:852)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper$4.call(JavaModelHelper.java:846)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper$4.call(JavaModelHelper.java:1)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.performCreation(JavaModelHelper.java:310)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveOperation(JavaModelHelper.java:256)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveCache(JavaModelHelper.java:293)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.getSuperTypeHierarchyFor(JavaModelHelper.java:844)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.getAllSuperclasses(JavaModelHelper.java:500)
    at ca.ubc.cs.ferret.jdt.JavaModelHelper.isThrowable(JavaModelHelper.java:1324)
    at ca.ubc.cs.ferret.jdt.ThrowsException.validateParameter(ThrowsException.java:28)
    at ca.ubc.cs.ferret.jdt.ThrowsException.validateParameter(ThrowsException.java:1)
    at ca.ubc.cs.ferret.model.AbstractIntersectionConceptualQuery.setParameters(AbstractIntersectionConceptualQuery.java:37)
    at ca.ubc.cs.ferret.model.Consultation.createConceptualQuery(Consultation.java:257)
    at ca.ubc.cs.ferret.model.Consultation.buildConceptualQueries(Consultation.java:198)
    - locked <0x0000000756d4b1e0> (a ca.ubc.cs.ferret.model.Consultation)
    at ca.ubc.cs.ferret.model.Consultation.run(Consultation.java:109)
    at ca.ubc.cs.ferret.Consultancy$4.run(Consultancy.java:438)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)

"main" #1 prio=6 os_prio=31 tid=0x0000000105814000 nid=0x307 waiting for monitor entry [0x00007fff5fbfc000]
   java.lang.Thread.State: BLOCKED (on object monitor)
    at ca.ubc.cs.ferret.Consultancy.isInProgress(Consultancy.java:567)
    - waiting to lock <0x000000075060d6b8> (a ca.ubc.cs.ferret.Consultancy)
    at ca.ubc.cs.ferret.model.Consultation.isInProgress(Consultation.java:439)
    at ca.ubc.cs.ferret.display.DwConsultation.buildChildren(DwConsultation.java:68)
    at ca.ubc.cs.ferret.display.DwBaseObject.rebuildChildren(DwBaseObject.java:51)
    at ca.ubc.cs.ferret.display.DwBaseObject.getChildren(DwBaseObject.java:44)
    at ca.ubc.cs.ferret.views.DossierContentProvider.getChildren(DossierContentProvider.java:88)
    at ca.ubc.cs.ferret.views.DossierContentProvider.getElements(DossierContentProvider.java:72)
    at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:995)
    at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:701)
    at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1340)
    at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:341)
    at org.eclipse.jface.viewers.StructuredViewer.getFilteredChildren(StructuredViewer.java:901)
    at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:618)
    at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$0(AbstractTreeViewer.java:814)
    at org.eclipse.jface.viewers.AbstractTreeViewer$$Lambda$203/1168765908.run(Unknown Source)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:792)
    at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:596)
    at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:763)
    at org.eclipse.jface.viewers.AbstractTreeViewer.internalInitializeTree(AbstractTreeViewer.java:1527)
    at org.eclipse.jface.viewers.TreeViewer.internalInitializeTree(TreeViewer.java:772)
    at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$1(AbstractTreeViewer.java:1512)
    at org.eclipse.jface.viewers.AbstractTreeViewer$$Lambda$202/1580807387.run(Unknown Source)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1447)
    at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:354)
    at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1408)
    at org.eclipse.jface.viewers.AbstractTreeViewer.inputChanged(AbstractTreeViewer.java:1506)
    at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:286)
    at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1685)
    at ca.ubc.cs.ferret.views.QueriesDossierView.setInput(QueriesDossierView.java:1205)
    - locked <0x0000000754b1d6c8> (a ca.ubc.cs.ferret.views.QueriesDossierView)
    at ca.ubc.cs.ferret.views.QueriesDossierView.basicPerformQuery(QueriesDossierView.java:1176)
    at ca.ubc.cs.ferret.views.QueriesDossierView.performQuery(QueriesDossierView.java:1138)
    at ca.ubc.cs.ferret.views.QueriesDossierView.handleSelectionChanged(QueriesDossierView.java:546)
    at ca.ubc.cs.ferret.views.QueriesDossierView$7.run(QueriesDossierView.java:525)
    at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)
    at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
    - locked <0x00000007aece2de0> (a org.eclipse.swt.widgets.RunnableLock)
    at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4033)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3700)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1146)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1035)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
    at org.eclipse.ui.internal.Workbench$$Lambda$15/1343838143.run(Unknown Source)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
briandealwis commented 6 years ago

I didn't include what the JDT Indexer was doing, but I suspect it was the same as this situation where the Java indexer is sleeping because it thinks it's writing to disk too fast. Eventually the indexer catches up, and the consultations search continues, and the main thread unblocks.

"main" #1 prio=6 os_prio=31 tid=0x00007f9e41012800 nid=0x307 waiting for monitor entry [0x00007ffee5875000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at ca.ubc.cs.ferret.Consultancy.fetchWork(Consultancy.java:513)
        - waiting to lock <0x0000000746b683a8> (a ca.ubc.cs.ferret.Consultancy)
        at ca.ubc.cs.ferret.Consultancy.abandon(Consultancy.java:476)
        at ca.ubc.cs.ferret.model.Consultation.cancel(Consultation.java:400)
        at ca.ubc.cs.ferret.views.DossierContentProvider.inputChanged(DossierContentProvider.java:49)
…

"Worker-98: Running Consultation: CloudSdkManager [0]" #3025 prio=5 os_prio=31 tid=0x00007f9e42a0c800 nid=0x1c24b in Object.wait() [0x000070000db
df000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:39)
        - locked <0x0000000766127cc0> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:908)
        at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:345)
        at org.eclipse.core.runtime.jobs.Job.join(Job.java:601)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.waitForIndex(Indexer.java:1022)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.waitForIndex(Indexer.java:1043)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.newSearchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:506)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.searchAllPossibleSubTypes(IndexBasedHierarchyBuilder.java:491)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.determinePossibleSubTypes(IndexBasedHierarchyBuilder.java:448)
        at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:154)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:320)
        at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1316)
        - locked <0x0000000766130a88> (a org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy)
        at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:91)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:732)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:798)
        at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:884)
        at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:841)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper$5.call(JavaModelHelper.java:854)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper$5.call(JavaModelHelper.java:1)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.performCreation(JavaModelHelper.java:311)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveOperation(JavaModelHelper.java:257)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveCache(JavaModelHelper.java:294)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.getSubTypeHierarchyFor(JavaModelHelper.java:851)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper$4.call(JavaModelHelper.java:845)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper$4.call(JavaModelHelper.java:1)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.performCreation(JavaModelHelper.java:311)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveOperation(JavaModelHelper.java:257)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.resolveCache(JavaModelHelper.java:294)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.getSuperTypeHierarchyFor(JavaModelHelper.java:843)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.getAllSuperclasses(JavaModelHelper.java:501)
        at ca.ubc.cs.ferret.jdt.JavaModelHelper.isThrowable(JavaModelHelper.java:1323)
        at ca.ubc.cs.ferret.jdt.ThrowsException.validateParameter(ThrowsException.java:28)
        at ca.ubc.cs.ferret.jdt.ThrowsException.validateParameter(ThrowsException.java:1)
        at ca.ubc.cs.ferret.model.AbstractIntersectionConceptualQuery.setParameters(AbstractIntersectionConceptualQuery.java:37)
        at ca.ubc.cs.ferret.model.Consultation.createConceptualQuery(Consultation.java:256)
        at ca.ubc.cs.ferret.model.Consultation.buildConceptualQueries(Consultation.java:197)
        - locked <0x000000076026d668> (a ca.ubc.cs.ferret.model.Consultation)
        at ca.ubc.cs.ferret.model.Consultation.run(Consultation.java:108)
        at ca.ubc.cs.ferret.Consultancy$4.run(Consultancy.java:437)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-94: Updating Java index" #3021 prio=5 os_prio=31 tid=0x00007f9e4f0a7000 nid=0x1077f waiting on condition [0x000070000c189000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.jdt.internal.core.nd.db.ChunkWriter$$Lambda$445/1691476264.sleep(Unknown Source)
        at org.eclipse.jdt.internal.core.nd.db.ChunkWriter.flush(ChunkWriter.java:129)
        at org.eclipse.jdt.internal.core.nd.db.ChunkWriter.write(ChunkWriter.java:95)
        at org.eclipse.jdt.internal.core.nd.db.Database.flushAndUnlockChunks(Database.java:1703)
        at org.eclipse.jdt.internal.core.nd.db.Database.flush(Database.java:1653)
        at org.eclipse.jdt.internal.core.nd.Nd.releaseWriteLockAndFlush(Nd.java:431)
        at org.eclipse.jdt.internal.core.nd.Nd.releaseWriteLock(Nd.java:387)
        at org.eclipse.jdt.internal.core.nd.Nd.releaseWriteLock(Nd.java:358)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.deleteResource(Indexer.java:571)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.cleanGarbage(Indexer.java:514)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.rescan(Indexer.java:260)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer.lambda$0(Indexer.java:146)
        at org.eclipse.jdt.internal.core.nd.indexer.Indexer$$Lambda$70/1174829684.run(Unknown Source)
        at org.eclipse.core.runtime.jobs.Job$2.run(Job.java:182)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)