Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[dali-dev] comments on bug 243547 (today's deadlock)

Here's my take on bug 243547. (Which was just closed, since the SSE-related
deadlock seems to have been fixed. But Gary Karasiuk will probably open a new bug
with the new deadlock, whose relevant stacktraces I've extracted from the dump
and attached.)

Any comments, corrections, or insights are welcome.

Both threads are running the Dali validator.

I think(?) Worker-2 has locked the workspace while the Dali validator deletes the
Dali-related markers. This causes the workspace to notify Dali that a resource
has changed. The Dali listener is waiting for a lock on the Dali model
(GenericJpaModel) so it can forward the notification to the appropriate JPA project.
Unfortunately, GenericJpaModel is already locked by Worker-5 (below).

In Worker-5, validation has triggered the (lazy) creation of a JPA project, locking
the Dali model (
GenericJpaModel) until the JPA project is built. This creation also
triggers the loading of the DTP plug-in, which then loads and validates the DTP drivers.
It looks like DTP has detected an error in one of the drivers and needs to lock the
workspace so it can add the appropriate problem markers. Unfortunately, the workspace
is already locked by Worker-2 (above).

The way we are doing things currently (which I've never really warmed up to :-) )
doesn't really allow us to remove the validation markers asynchronously. We
could investigate changing that.... Likewise, it might be difficult for DTP to add its
problem markers asynchronously; but might merit investigation....


Rough notes:

Worker-2
JpaValidator
calls WorkbenchReporter.removeAllMessages(IValidator)
calls Workspace.deleteMarkers(IMarker[])
which notifies listeners that a resource has changed
waiting to call GenericJpaModel.synchronizeFiles(IProject, IResourceDelta)
    which is locked by Worker-5
somewhere acquires a lock...

Worker-5
JpaValidator
calls JptCorePlugin to get the appropriate JPA project
locks and calls GenericJpaModel to get the JPA project
the JPA project is (lazily) built
triggers the loading of JptDbPlugin
builds the DTPConnectionProfileRepository
triggers the DTP InternalProfileManager to load the profiles
the properties of a DTP driver are invalid so...
DriverValidator tries to add a problem marker
WorkManager waits to lock the "primary workspace lock"

3XMTHREADINFO      "Worker-2" TID:0x3210B200, j9thread_t:0x385EC750, state:B, prio=5
3XMTHREADINFO1            (native thread ID:0x378, native priority:0x5, native policy:UNKNOWN)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:295)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:275)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:286)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.synchronizeFiles(JpaModelManager.java:272)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.resourcePostChange(JpaModelManager.java:264)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.resourceChanged(JpaModelManager.java:237)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager$ResourceChangeListener.resourceChanged(JpaModelManager.java:487)
4XESTACKTRACE          at org/eclipse/core/internal/events/NotificationManager$2.run(NotificationManager.java:288)
4XESTACKTRACE          at org/eclipse/core/runtime/SafeRunner.run(SafeRunner.java:37(Compiled Code))
4XESTACKTRACE          at org/eclipse/core/internal/events/NotificationManager.notify(NotificationManager.java:282)
4XESTACKTRACE          at org/eclipse/core/internal/events/NotificationManager.broadcastChanges(NotificationManager.java:148)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Workspace.broadcastPostChange(Workspace.java:313)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Workspace.endOperation(Workspace.java:1022)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Workspace.deleteMarkers(Workspace.java:961)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/TaskListUtility.removeTaskSubset(TaskListUtility.java:428)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/TaskListUtility.removeAllTasks(TaskListUtility.java:406)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/TaskListUtility.removeAllTasks(TaskListUtility.java:402)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:164)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:544)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/operations/WorkbenchReporter.removeAllMessages(WorkbenchReporter.java:509)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/validation/JpaValidator.validate(JpaValidator.java:46)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/validation/JpaValidator.validateInJob(JpaValidator.java:77)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/operations/ValidatorJob.run(ValidatorJob.java:78)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/Worker.run(Worker.java:55)


3XMTHREADINFO      "Worker-5" TID:0x32119D00, j9thread_t:0x39E62C38, state:CW, prio=1
3XMTHREADINFO1            (native thread ID:0x9FC, native priority:0x1, native policy:UNKNOWN)
4XESTACKTRACE          at java/lang/Object.wait(Native Method)
4XESTACKTRACE          at java/lang/Object.wait(Object.java:196)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/Semaphore.acquire(Semaphore.java:38)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/OrderedLock.doAcquire(OrderedLock.java:169)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:105(Compiled Code))
4XESTACKTRACE          at org/eclipse/core/internal/jobs/OrderedLock.acquire(OrderedLock.java:82(Compiled Code))
4XESTACKTRACE          at org/eclipse/core/internal/resources/WorkManager.checkIn(WorkManager.java:118)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Workspace.prepareOperation(Workspace.java:1747)
4XESTACKTRACE          at org/eclipse/core/internal/resources/Resource.createMarker(Resource.java:641)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/drivers/DriverValidator.addProblemMarker(DriverValidator.java:230)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/drivers/DriverValidator.isValid(DriverValidator.java:96)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/drivers/DriverValidator.isValid(DriverValidator.java:79)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/internal/InternalProfileManager.getDriverInstance(InternalProfileManager.java:1334)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/internal/InternalProfileManager.enableLocalDatabase(InternalProfileManager.java:1252)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/internal/InternalProfileManager.loadLocalRegisteredDatabases(InternalProfileManager.java:1211)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/internal/InternalProfileManager.loadProfiles(InternalProfileManager.java:928)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/internal/InternalProfileManager.getProfiles(InternalProfileManager.java:139)
4XESTACKTRACE          at org/eclipse/datatools/connectivity/ProfileManager.getProfiles(ProfileManager.java:46)
4XESTACKTRACE          at org/eclipse/jpt/db/internal/DTPConnectionProfileRepository.start(DTPConnectionProfileRepository.java:63)
4XESTACKTRACE          at org/eclipse/jpt/db/JptDbPlugin.start(JptDbPlugin.java:53)
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleContextImpl$2.run(BundleContextImpl.java:1009)
4XESTACKTRACE          at java/security/AccessController.doPrivileged(AccessController.java:251)
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleContextImpl.startActivator(BundleContextImpl.java:1003)
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleContextImpl.start(BundleContextImpl.java:984)
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleHost.startWorker(BundleHost.java:346)
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/AbstractBundle.start(AbstractBundle.java:265)
4XESTACKTRACE          at org/eclipse/osgi/framework/util/SecureAction.start(SecureAction.java:400)
4XESTACKTRACE          at org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/baseadaptor/loader/ClasspathManager.findLocalClass(ClasspathManager.java:427(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.findLocalClass(DefaultClassLoader.java:193(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleLoader.findLocalClass(BundleLoader.java:368(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/SingleSourcePackage.loadClass(SingleSourcePackage.java:33(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleLoader.findClassInternal(BundleLoader.java:441(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleLoader.findClass(BundleLoader.java:397(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/framework/internal/core/BundleLoader.findClass(BundleLoader.java:385(Compiled Code))
4XESTACKTRACE          at org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.loadClass(DefaultClassLoader.java:87(Compiled Code))
4XESTACKTRACE          at java/lang/ClassLoader.loadClass(ClassLoader.java:609(Compiled Code))
4XESTACKTRACE          at java/lang/J9VMInternals.verifyImpl(Native Method)
4XESTACKTRACE          at java/lang/J9VMInternals.verify(J9VMInternals.java:72(Compiled Code))
4XESTACKTRACE          at java/lang/J9VMInternals.initialize(J9VMInternals.java:134(Compiled Code))
4XESTACKTRACE          at org/eclipse/jpt/core/internal/platform/GenericJpaFactory.buildJpaDataSource(GenericJpaFactory.java:226)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/GenericJpaProject.<init>(GenericJpaProject.java:141)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/platform/GenericJpaFactory.buildJpaProject(GenericJpaFactory.java:222)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/GenericJpaModel$DefaultJpaProjectHolder.buildJpaProject(GenericJpaModel.java:453)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/GenericJpaModel$DefaultJpaProjectHolder.jpaProject(GenericJpaModel.java:445)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/GenericJpaModel.getJpaProject(GenericJpaModel.java:84)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/JpaModelManager.getJpaProject(JpaModelManager.java:178)
4XESTACKTRACE          at org/eclipse/jpt/core/JptCorePlugin.getJpaProject(JptCorePlugin.java:157)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/validation/JpaValidator.validationMessages(JpaValidator.java:55)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/validation/JpaValidator.validate(JpaValidator.java:48)
4XESTACKTRACE          at org/eclipse/jpt/core/internal/validation/JpaValidator.validateInJob(JpaValidator.java:77)
4XESTACKTRACE          at org/eclipse/wst/validation/internal/operations/ValidatorJob.run(ValidatorJob.java:78)
4XESTACKTRACE          at org/eclipse/core/internal/jobs/Worker.run(Worker.java:55)

Back to the top