Community
Participate
Working Groups
The synchronization on agentServices also surrounds code which calls ServiceTracker.open(). Opening a ServiceTracker may lead to calling user code (e.g. calling ServiceFactory.getService()). Generally it is not a good practice to synchronize code which is calling unknown user code. This may lead to a deadlock situation. Would it be possible to revise the synchronization in ProvisioningAgent.getService()?
Does anyone have plan to fix this in 3.7?
No, this is up for grab. Are you interested Meng?
It looks like Stoyan was quite right, it can indeed lead to deadlocks, and here is a thread dump that proves it : 2012-05-20 13:48:45 Full thread dump Java HotSpot(TM) 64-Bit Server VM (20.6-b01-415 mixed mode): "Attach Listener" daemon prio=9 tid=11d28f800 nid=0x114f01000 waiting on condition [00000000] java.lang.Thread.State: RUNNABLE "MultiThreadedHttpConnectionManager cleanup" daemon prio=5 tid=11a349000 nid=0x116e9e000 in Object.wait() [116e9d000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7e2f4e018> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <7e2f4e018> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java:1122) "Scala Presentation Compiler [org.scala-ide.sdt.core.tests]" daemon prio=4 tid=11a9c5800 nid=0x117901000 in Object.wait() [117900000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7e6ebd750> (a scala.tools.nsc.util.WorkScheduler) at java.lang.Object.wait(Object.java:485) at scala.tools.nsc.util.WorkScheduler.waitForMoreWork(WorkScheduler.scala:16) - locked <7e6ebd750> (a scala.tools.nsc.util.WorkScheduler) at scala.tools.nsc.interactive.PresentationCompilerThread$$anonfun$run$1.apply$mcZ$sp(PresentationCompilerThread.scala:21) at scala.tools.nsc.io.NullLogger$.logreplay(Replayer.scala:38) at scala.tools.nsc.interactive.PresentationCompilerThread.run(PresentationCompilerThread.scala:21) "Scala Presentation Compiler [org.scala-ide.sdt.core]" daemon prio=4 tid=1182af800 nid=0x116bc7000 in Object.wait() [116bc6000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7df93d708> (a scala.tools.nsc.util.WorkScheduler) at java.lang.Object.wait(Object.java:485) at scala.tools.nsc.util.WorkScheduler.waitForMoreWork(WorkScheduler.scala:16) - locked <7df93d708> (a scala.tools.nsc.util.WorkScheduler) at scala.tools.nsc.interactive.PresentationCompilerThread$$anonfun$run$1.apply$mcZ$sp(PresentationCompilerThread.scala:21) at scala.tools.nsc.io.NullLogger$.logreplay(Replayer.scala:38) at scala.tools.nsc.interactive.PresentationCompilerThread.run(PresentationCompilerThread.scala:21) "[ThreadPool Manager] - Idle Thread" daemon prio=5 tid=11703f800 nid=0x116cef000 in Object.wait() [116cee000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7db03efa8> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor) at java.lang.Object.wait(Object.java:485) at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:106) - locked <7db03efa8> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor) "Worker-9" prio=5 tid=114614000 nid=0x115907000 waiting for monitor entry [115906000] java.lang.Thread.State: BLOCKED (on object monitor) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.ui.ProvUI.getProvisioningEventBus(ProvUI.java:277) at org.eclipse.equinox.p2.ui.ProvisioningUI.signalRepositoryOperationStart(ProvisioningUI.java:369) at org.eclipse.equinox.p2.ui.ProvisioningUI.loadMetadataRepository(ProvisioningUI.java:400) at org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement.getMetadataRepository(MetadataRepositoryElement.java:120) at org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement.fetchChildren(MetadataRepositoryElement.java:70) at org.eclipse.equinox.internal.p2.ui.model.RemoteQueriedElement.fetchDeferredChildren(RemoteQueriedElement.java:34) at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-8" prio=5 tid=118f6b000 nid=0x115804000 in Object.wait() [115803000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) - locked <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) "Worker-7" prio=5 tid=1189d6800 nid=0x115701000 in Object.wait() [115700000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) - locked <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) "Worker-6" prio=5 tid=118219000 nid=0x115201000 waiting for monitor entry [115200000] java.lang.Thread.State: BLOCKED (on object monitor) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences.doSave(ProfilePreferences.java:120) - locked <7d4b4a248> (a java.lang.Object) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences$SaveJob.run(ProfilePreferences.java:49) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-5" prio=5 tid=10cb00800 nid=0x114901000 in Object.wait() [114900000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d61f21a0> (a java.lang.Object) at java.lang.Object.wait(Object.java:485) at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:272) - locked <7d61f21a0> (a java.lang.Object) at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:199) at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:92) at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:286) at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:118) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2282) at org.eclipse.core.internal.resources.Resource.refreshLocal(Resource.java:1655) at org.eclipse.core.internal.refresh.RefreshJob.runInWorkspace(RefreshJob.java:167) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-4" prio=5 tid=114613800 nid=0x1137df000 in Object.wait() [1137de000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) - locked <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) "Worker-3" prio=5 tid=114612800 nid=0x11313b000 waiting for monitor entry [11313a000] java.lang.Thread.State: BLOCKED (on object monitor) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences.doSave(ProfilePreferences.java:119) - waiting to lock <7d4b4a248> (a java.lang.Object) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences$SaveJob.run(ProfilePreferences.java:49) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-2" prio=5 tid=118326800 nid=0x112f30000 in Object.wait() [112f2f000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:188) - locked <7d4712080> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:220) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50) "Java indexing" daemon prio=4 tid=1143d5800 nid=0x113038000 in Object.wait() [113037000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d86b42e0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Object.wait(Object.java:485) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:382) - locked <7d86b42e0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager) at java.lang.Thread.run(Thread.java:680) "Worker-1" prio=5 tid=104383000 nid=0x112958000 runnable [112955000] java.lang.Thread.State: RUNNABLE at java.io.ObjectOutputStream.writeNull(ObjectOutputStream.java:1177) at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1205) at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1262) at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1211) at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1262) at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1211) at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1262) at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1211) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1395) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1346) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1154) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1483) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1400) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1158) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:330) at xsbt.api.SourceFormat$.writes(SourceFormat.scala:26) at xsbt.api.SourceFormat$.writes(SourceFormat.scala:15) at sbinary.Operations$.write(operations.scala:10) at sbinary.BasicTypes$$anon$4.writes(standardtypes.scala:35) at sbinary.BasicTypes$$anon$4.writes(standardtypes.scala:24) at sbinary.Operations$.write(operations.scala:10) at sbinary.Generic$$anon$2$$anonfun$writes$3.apply(generic.scala:47) at sbinary.Generic$$anon$2$$anonfun$writes$3.apply(generic.scala:47) at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:180) at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:350) at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:350) at sbinary.Generic$$anon$2.writes(generic.scala:47) at sbinary.Generic$$anon$2.writes(generic.scala:46) at sbinary.Operations$.write(operations.scala:10) at sbinary.Generic$$anon$9.writes(generic.scala:128) at sbinary.Operations$.write(operations.scala:10) at sbinary.Generic$$anon$10.writes(generic.scala:151) at sbinary.Operations$.write(operations.scala:10) at sbinary.BasicTypes$$anon$4.writes(standardtypes.scala:34) at sbinary.BasicTypes$$anon$4.writes(standardtypes.scala:24) at sbinary.Operations$.write(operations.scala:10) at sbt.inc.FileBasedStore$$anon$1$$anonfun$set$1.apply(FileBasedStore.scala:17) at sbt.inc.FileBasedStore$$anon$1$$anonfun$set$1.apply(FileBasedStore.scala:16) at sbt.Using.apply(Using.scala:25) at sbt.IO$$anonfun$gzipFileOut$1$$anonfun$apply$6.apply(IO.scala:592) at sbt.IO$$anonfun$gzipFileOut$1$$anonfun$apply$6.apply(IO.scala:591) at sbt.Using.apply(Using.scala:25) at sbt.IO$$anonfun$gzipFileOut$1.apply(IO.scala:591) at sbt.IO$$anonfun$gzipFileOut$1.apply(IO.scala:590) at sbt.Using.apply(Using.scala:25) at sbt.IO$.gzipFileOut(IO.scala:590) at sbt.inc.FileBasedStore$$anon$1.set(FileBasedStore.scala:16) at scala.tools.eclipse.buildmanager.sbtintegration.WeaklyCachedStore.set(WeaklyCachedStore.scala:27) at sbt.inc.AnalysisStore$$anon$2.set(AnalysisStore.scala:30) - locked <7dbf3edd0> (a sbt.inc.AnalysisStore$$anon$2) at scala.tools.eclipse.buildmanager.sbtintegration.AnalysisCompile.doCompile(AnalysisCompile.scala:183) at scala.tools.eclipse.buildmanager.sbtintegration.EclipseSbtBuildManager.runCompiler(EclipseSbtBuildManager.scala:369) at scala.tools.eclipse.buildmanager.sbtintegration.EclipseSbtBuildManager.update(EclipseSbtBuildManager.scala:331) at scala.tools.eclipse.buildmanager.sbtintegration.EclipseSbtBuildManager.build(EclipseSbtBuildManager.scala:433) at scala.tools.eclipse.ScalaProject.build(ScalaProject.scala:750) at scala.tools.eclipse.ScalaBuilder.build(ScalaBuilder.scala:114) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:239) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:292) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:295) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:351) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:374) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:143) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:241) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Provisioning Event Dispatcher" daemon prio=5 tid=104442800 nid=0x1124d7000 in Object.wait() [1124d6000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4a8b118> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) - locked <7d4a8b118> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) "Worker-0" prio=5 tid=10d9f1800 nid=0x1122ce000 waiting for monitor entry [1122cd000] java.lang.Thread.State: BLOCKED (on object monitor) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.addListener(ProvisioningEventBus.java:45) - waiting to lock <7d4a60f10> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.internal.p2.repository.CacheManager.registerRepoEventListener(CacheManager.java:282) at org.eclipse.equinox.internal.p2.repository.CacheManager.setEventBus(CacheManager.java:296) at org.eclipse.equinox.internal.p2.repository.CacheManagerComponent.createService(CacheManagerComponent.java:23) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:72) - locked <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.getLocalFile(SimpleMetadataRepositoryFactory.java:63) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:88) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:749) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:82) at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-JM" prio=5 tid=10c8d8000 nid=0x112779000 in Object.wait() [112778000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d45c9d78> (a java.util.ArrayList) at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:58) - locked <7d45c9d78> (a java.util.ArrayList) "[Timer] - Main Queue Handler" daemon prio=5 tid=10c8d7800 nid=0x112676000 in Object.wait() [112675000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d488adf8> (a java.lang.Object) at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:141) - locked <7d488adf8> (a java.lang.Object) at java.lang.Thread.run(Thread.java:680) "Start Level Event Dispatcher" daemon prio=5 tid=104336000 nid=0x111ebd000 in Object.wait() [111ebc000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4618338> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) - locked <7d4618338> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) "Framework Event Dispatcher" daemon prio=5 tid=104335000 nid=0x111dba000 in Object.wait() [111db9000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4585448> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) - locked <7d4585448> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) "Bundle File Closer" daemon prio=5 tid=10e0fa800 nid=0x111849000 in Object.wait() [111848000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d42ef9e0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400) - locked <7d42ef9e0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:336) "State Data Manager" daemon prio=5 tid=10d8c4000 nid=0x111586000 waiting on condition [111585000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at org.eclipse.osgi.internal.baseadaptor.StateManager.run(StateManager.java:297) at java.lang.Thread.run(Thread.java:680) "Framework Active Thread" prio=5 tid=10c949800 nid=0x111483000 in Object.wait() [111482000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4000a70> (a org.eclipse.osgi.framework.internal.core.Framework) at org.eclipse.osgi.framework.internal.core.Framework.run(Framework.java:1817) - locked <7d4000a70> (a org.eclipse.osgi.framework.internal.core.Framework) at java.lang.Thread.run(Thread.java:680) "Poller SunPKCS11-Darwin" daemon prio=1 tid=10e0d3000 nid=0x10ed80000 waiting on condition [10ed7f000] java.lang.Thread.State: TIMED_WAITING (sleeping) at java.lang.Thread.sleep(Native Method) at sun.security.pkcs11.SunPKCS11$TokenPoller.run(SunPKCS11.java:692) at java.lang.Thread.run(Thread.java:680) "Low Memory Detector" daemon prio=5 tid=10e002000 nid=0x10eb07000 runnable [00000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread1" daemon prio=9 tid=1040f6000 nid=0x10ea04000 runnable [00000000] java.lang.Thread.State: RUNNABLE "C2 CompilerThread0" daemon prio=9 tid=1040f5000 nid=0x10e901000 runnable [00000000] java.lang.Thread.State: RUNNABLE "Signal Dispatcher" daemon prio=9 tid=1040f4800 nid=0x10c704000 runnable [00000000] java.lang.Thread.State: RUNNABLE "Surrogate Locker Thread (Concurrent GC)" daemon prio=5 tid=1040f3800 nid=0x10c601000 waiting on condition [00000000] java.lang.Thread.State: RUNNABLE "Finalizer" daemon prio=8 tid=1040f1000 nid=0x10c16f000 in Object.wait() [10c16e000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d40008c8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118) - locked <7d40008c8> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=1040f0000 nid=0x10c06c000 in Object.wait() [10c06b000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <7d4002510> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:485) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <7d4002510> (a java.lang.ref.Reference$Lock) "main" prio=6 tid=104001800 nid=0x7fff7db46960 waiting for monitor entry [7fff5fbfa000] java.lang.Thread.State: BLOCKED (on object monitor) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.getRepositoryTracker(ProvisioningUI.java:120) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.getLocalSites(RepositorySelectionGroup.java:436) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.repoComboSelectionChanged(RepositorySelectionGroup.java:634) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$10.run(RepositorySelectionGroup.java:368) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.fillRepoCombo(RepositorySelectionGroup.java:374) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$14.repositoryAdded(RepositorySelectionGroup.java:497) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.handleRepositoryEvent(ProvUIProvisioningListener.java:113) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.notify(ProvUIProvisioningListener.java:79) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:108) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.publishEvent(ProvisioningEventBus.java:85) - locked <7d4a60f10> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.signalRepositoryOperationComplete(ProvisioningUI.java:383) at org.eclipse.equinox.internal.p2.ui.ColocatedRepositoryTracker.addRepository(ColocatedRepositoryTracker.java:72) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$16.run(RepositorySelectionGroup.java:587) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1029) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.addRepository(RepositorySelectionGroup.java:567) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$2.keyPressed(RepositorySelectionGroup.java:138) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1494) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1490) at org.eclipse.swt.widgets.Combo.sendKeyEvent(Combo.java:1249) at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1060) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5563) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220) at org.eclipse.swt.widgets.Widget.superKeyDown(Widget.java:1898) at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1076) at org.eclipse.swt.widgets.Control.keyDown(Control.java:2367) at org.eclipse.swt.widgets.Composite.keyDown(Composite.java:600) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5473) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220) at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2095) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2253) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5535) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4989) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5138) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3610) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.equinox.p2.ui.ProvisioningUI.openInstallWizard(ProvisioningUI.java:209) at org.eclipse.equinox.internal.p2.ui.sdk.InstallNewSoftwareHandler.doExecute(InstallNewSoftwareHandler.java:31) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.doExecuteAndLoad(PreloadingRepositoryHandler.java:114) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$1.run(PreloadingRepositoryHandler.java:68) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.execute(PreloadingRepositoryHandler.java:66) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1270) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3974) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3613) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) "VM Thread" prio=9 tid=1040eb800 nid=0x10bf69000 runnable "Gang worker#0 (Parallel GC Threads)" prio=9 tid=104002800 nid=0x107ac2000 runnable "Gang worker#1 (Parallel GC Threads)" prio=9 tid=104003800 nid=0x107bc5000 runnable "Gang worker#2 (Parallel GC Threads)" prio=9 tid=104004000 nid=0x107cc8000 runnable "Gang worker#3 (Parallel GC Threads)" prio=9 tid=104004800 nid=0x107dcb000 runnable "Concurrent Mark-Sweep GC Thread" prio=9 tid=10407f800 nid=0x10bc31000 runnable "VM Periodic Task Thread" prio=10 tid=10e014000 nid=0x10ec0a000 waiting on condition "Exception Catcher Thread" prio=10 tid=104002000 nid=0x103419000 runnable JNI global references: 2970 Found one Java-level deadlock: ============================= "Worker-9": waiting to lock monitor 100845768 (object 7d4abdc50, a java.util.Collections$SynchronizedMap), which is held by "Worker-0" "Worker-0": waiting to lock monitor 1008a3760 (object 7d4a60f10, a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap), which is held by "main" "main": waiting to lock monitor 100845768 (object 7d4abdc50, a java.util.Collections$SynchronizedMap), which is held by "Worker-0" Java stack information for the threads listed above: =================================================== "Worker-9": at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.ui.ProvUI.getProvisioningEventBus(ProvUI.java:277) at org.eclipse.equinox.p2.ui.ProvisioningUI.signalRepositoryOperationStart(ProvisioningUI.java:369) at org.eclipse.equinox.p2.ui.ProvisioningUI.loadMetadataRepository(ProvisioningUI.java:400) at org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement.getMetadataRepository(MetadataRepositoryElement.java:120) at org.eclipse.equinox.internal.p2.ui.model.MetadataRepositoryElement.fetchChildren(MetadataRepositoryElement.java:70) at org.eclipse.equinox.internal.p2.ui.model.RemoteQueriedElement.fetchDeferredChildren(RemoteQueriedElement.java:34) at org.eclipse.ui.progress.DeferredTreeContentManager$1.run(DeferredTreeContentManager.java:235) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-0": at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.addListener(ProvisioningEventBus.java:45) - waiting to lock <7d4a60f10> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.internal.p2.repository.CacheManager.registerRepoEventListener(CacheManager.java:282) at org.eclipse.equinox.internal.p2.repository.CacheManager.setEventBus(CacheManager.java:296) at org.eclipse.equinox.internal.p2.repository.CacheManagerComponent.createService(CacheManagerComponent.java:23) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:72) - locked <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.getLocalFile(SimpleMetadataRepositoryFactory.java:63) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:88) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:749) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:651) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:82) at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "main": at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <7d4abdc50> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.getRepositoryTracker(ProvisioningUI.java:120) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.getLocalSites(RepositorySelectionGroup.java:436) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.repoComboSelectionChanged(RepositorySelectionGroup.java:634) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$10.run(RepositorySelectionGroup.java:368) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.fillRepoCombo(RepositorySelectionGroup.java:374) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$14.repositoryAdded(RepositorySelectionGroup.java:497) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.handleRepositoryEvent(ProvUIProvisioningListener.java:113) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.notify(ProvUIProvisioningListener.java:79) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:108) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.publishEvent(ProvisioningEventBus.java:85) - locked <7d4a60f10> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.signalRepositoryOperationComplete(ProvisioningUI.java:383) at org.eclipse.equinox.internal.p2.ui.ColocatedRepositoryTracker.addRepository(ColocatedRepositoryTracker.java:72) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$16.run(RepositorySelectionGroup.java:587) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1029) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.addRepository(RepositorySelectionGroup.java:567) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$2.keyPressed(RepositorySelectionGroup.java:138) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1494) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1490) at org.eclipse.swt.widgets.Combo.sendKeyEvent(Combo.java:1249) at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1060) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5563) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220) at org.eclipse.swt.widgets.Widget.superKeyDown(Widget.java:1898) at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1076) at org.eclipse.swt.widgets.Control.keyDown(Control.java:2367) at org.eclipse.swt.widgets.Composite.keyDown(Composite.java:600) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5473) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:220) at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2095) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2253) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5535) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4989) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5138) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3610) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.equinox.p2.ui.ProvisioningUI.openInstallWizard(ProvisioningUI.java:209) at org.eclipse.equinox.internal.p2.ui.sdk.InstallNewSoftwareHandler.doExecute(InstallNewSoftwareHandler.java:31) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.doExecuteAndLoad(PreloadingRepositoryHandler.java:114) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$1.run(PreloadingRepositoryHandler.java:68) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.execute(PreloadingRepositoryHandler.java:66) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241) at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829) at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815) at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4128) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1457) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1480) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1465) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1270) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3974) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3613) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) Found 1 deadlock. I'm using Eclipse 3.7.2 (M20120208-0800).
Created attachment 216430 [details] Tentative patch The attached patch introduces a lock whose granularity is the service being requested. I kept the acquisition and release of the lock at the same scope than what the synchronized block was doing. The patch could be improved by acquiring the lock later. Also the patch relies on Java 5 apis.
The patch looks good to me. The only concern I have is the timeout of 5 seconds might not be sufficient in some cases. It probably needs to be increased or be configurable. I think a timeout of 30 seconds is better. The purpose of the timeout is not to fail fast but to prevent deadlock.
Will not be addressed in Luna.
Still deadlocks in Luna, all right: Found one Java-level deadlock: ============================= "Worker-20": waiting to lock monitor 0x0000000131025ff8 (object 0x00000007232a9570, a java.util.Collections$SynchronizedMap), which is held by "Worker-16" "Worker-16": waiting to lock monitor 0x0000000100a41208 (object 0x0000000728fea4a0, a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap), which is held by "main" "main": waiting to lock monitor 0x0000000131025ff8 (object 0x00000007232a9570, a java.util.Collections$SynchronizedMap), which is held by "Worker-16" Java stack information for the threads listed above: =================================================== "Worker-20": at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <0x00000007232a9570> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences.doSave(ProfilePreferences.java:120) - locked <0x0000000728c7b970> (a java.lang.Object) at org.eclipse.equinox.internal.p2.engine.ProfilePreferences$SaveJob.run(ProfilePreferences.java:49) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "Worker-16": at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.addListener(ProvisioningEventBus.java:45) - waiting to lock <0x0000000728fea4a0> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.internal.p2.repository.CacheManager.registerRepoEventListener(CacheManager.java:294) at org.eclipse.equinox.internal.p2.repository.CacheManager.setEventBus(CacheManager.java:308) at org.eclipse.equinox.internal.p2.repository.CacheManagerComponent.createService(CacheManagerComponent.java:23) at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:72) - locked <0x00000007232a9570> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.getLocalFile(SimpleMetadataRepositoryFactory.java:63) at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:88) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:57) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:768) at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:668) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:96) at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:92) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.doLoad(LoadMetadataRepositoryJob.java:117) at org.eclipse.equinox.p2.ui.LoadMetadataRepositoryJob.runModal(LoadMetadataRepositoryJob.java:102) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$2.runModal(PreloadingRepositoryHandler.java:83) at org.eclipse.equinox.p2.operations.ProvisioningJob.run(ProvisioningJob.java:177) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) "main": at org.eclipse.equinox.internal.p2.core.ProvisioningAgent.getService(ProvisioningAgent.java:49) - waiting to lock <0x00000007232a9570> (a java.util.Collections$SynchronizedMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.getRepositoryTracker(ProvisioningUI.java:118) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.getLocalSites(RepositorySelectionGroup.java:436) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.repoComboSelectionChanged(RepositorySelectionGroup.java:634) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$10.run(RepositorySelectionGroup.java:368) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.fillRepoCombo(RepositorySelectionGroup.java:374) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$14.repositoryAdded(RepositorySelectionGroup.java:497) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.handleRepositoryEvent(ProvUIProvisioningListener.java:113) at org.eclipse.equinox.internal.p2.ui.ProvUIProvisioningListener.notify(ProvUIProvisioningListener.java:79) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:108) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.dispatchEvent(ProvisioningEventBus.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) at org.eclipse.equinox.internal.p2.core.ProvisioningEventBus.publishEvent(ProvisioningEventBus.java:85) - locked <0x0000000728fea4a0> (a org.eclipse.osgi.framework.eventmgr.CopyOnWriteIdentityMap) at org.eclipse.equinox.p2.ui.ProvisioningUI.signalRepositoryOperationComplete(ProvisioningUI.java:420) at org.eclipse.equinox.internal.p2.ui.ColocatedRepositoryTracker.addRepository(ColocatedRepositoryTracker.java:74) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$16.run(RepositorySelectionGroup.java:587) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:466) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:374) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1059) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup.addRepository(RepositorySelectionGroup.java:567) at org.eclipse.equinox.internal.p2.ui.dialogs.RepositorySelectionGroup$2.keyPressed(RepositorySelectionGroup.java:138) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4199) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1504) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1500) at org.eclipse.swt.widgets.Combo.sendKeyEvent(Combo.java:1413) at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1060) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5730) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221) at org.eclipse.swt.widgets.Widget.superKeyDown(Widget.java:1908) at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1085) at org.eclipse.swt.widgets.Control.keyDown(Control.java:2400) at org.eclipse.swt.widgets.Composite.keyDown(Composite.java:607) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5640) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221) at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2105) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2329) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5702) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5139) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5288) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3666) at org.eclipse.jface.window.Window.runEventLoop(Window.java:832) at org.eclipse.jface.window.Window.open(Window.java:808) at org.eclipse.equinox.p2.ui.ProvisioningUI.openInstallWizard(ProvisioningUI.java:226) at org.eclipse.equinox.p2.ui.ProvisioningUI.openInstallWizard(ProvisioningUI.java:202) at org.eclipse.equinox.internal.p2.ui.sdk.InstallNewSoftwareHandler.doExecute(InstallNewSoftwareHandler.java:31) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.doExecuteAndLoad(PreloadingRepositoryHandler.java:121) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler$1.run(PreloadingRepositoryHandler.java:68) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.equinox.internal.p2.ui.sdk.PreloadingRepositoryHandler.execute(PreloadingRepositoryHandler.java:66) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:294) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90) at sun.reflect.GeneratedMethodAccessor42.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:247) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:229) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:149) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210) at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:343) at org.eclipse.ui.internal.quickaccess.CommandElement.execute(CommandElement.java:71) at org.eclipse.ui.internal.quickaccess.SearchField$2.handleElementSelected(SearchField.java:179) at org.eclipse.ui.internal.quickaccess.QuickAccessContents.handleSelection(QuickAccessContents.java:461) at org.eclipse.ui.internal.quickaccess.QuickAccessContents.access$0(QuickAccessContents.java:451) at org.eclipse.ui.internal.quickaccess.QuickAccessContents$1.keyPressed(QuickAccessContents.java:496) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:167) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4199) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1467) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1490) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1475) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1504) at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1634) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1500) at org.eclipse.swt.widgets.Text.sendKeyEvent(Text.java:1600) at org.eclipse.swt.widgets.Control.doCommandBySelector(Control.java:1060) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5730) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221) at org.eclipse.swt.widgets.Widget.superKeyDown(Widget.java:1908) at org.eclipse.swt.widgets.Widget.keyDown(Widget.java:1085) at org.eclipse.swt.widgets.Control.keyDown(Control.java:2400) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5640) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Widget.callSuper(Widget.java:221) at org.eclipse.swt.widgets.Widget.windowSendEvent(Widget.java:2105) at org.eclipse.swt.widgets.Shell.windowSendEvent(Shell.java:2329) at org.eclipse.swt.widgets.Display.windowProc(Display.java:5702) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:5139) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:5288) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:128) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3666) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1151) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1032) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:148) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:636) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:579) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:135) 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:380) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235) 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:497) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603) at org.eclipse.equinox.launcher.Main.run(Main.java:1465) Found 1 deadlock.
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant. -- The automated Eclipse Genie.