Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 315367

Summary: Deadlock when changing selection in synchronize view
Product: [Technology] Subversive Reporter: Benno Baumgartner <benno.baumgartner>
Component: UIAssignee: Igor Burilo <igor.burilo>
Status: RESOLVED INVALID QA Contact:
Severity: critical    
Priority: P3 CC: a.gurov
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
thread dump
none
Locked threads none

Description Benno Baumgartner CLA 2010-06-02 05:54:10 EDT
Created attachment 170768 [details]
thread dump

Eclipse RC2

See thread dump. I've changed selection in synchronize view while a ''override and update'' operation was in progress.
Comment 1 Alexander Gurov CLA 2010-12-13 01:34:48 EST
Created attachment 185038 [details]
Locked threads

As you can see from the thread dumps (complete thread dumps for the 3 selected threads you can see in attachement), there were no deadlock. It's just that 2 threads were awaiting for the completion of the third one.

"SVN-Y7J5W" prio=6 tid=0x57e01800 nid=0xfcc runnable [0x56e9e000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.fill(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        - locked <0x09a541f0> (a java.io.BufferedInputStream)
        at org.tmatesoft.svn.core.internal.wc.SVNFileUtil.compareFiles(SVNFileUtil.java:950)
        at org.tmatesoft.svn.core.internal.wc.admin.SVNAdminArea.compareAndVerify(SVNAdminArea.java:1429)
        at org.tmatesoft.svn.core.internal.wc.admin.SVNAdminArea.hasTextModifications(SVNAdminArea.java:218)
..........................
        at org.tmatesoft.svn.core.javahl.SVNClientImpl.status(SVNClientImpl.java:282)
        at org.polarion.team.svn.connector.svnkit.SVNKitConnector.status(SVNKitConnector.java:336)
        at org.eclipse.team.svn.core.extension.factory.ThreadNameModifier.status(ThreadNameModifier.java:608)
        at org.eclipse.team.svn.core.utility.SVNUtility.status(SVNUtility.java:299)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.getStatuses(SVNRemoteStorage.java:862)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.loadLocalResourcesSubTreeSVNImpl(SVNRemoteStorage.java:777)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.loadLocalResourcesSubTree(SVNRemoteStorage.java:656)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.asLocalResource(SVNRemoteStorage.java:421)
        - locked <0x18c695f8> (a org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage)
        at org.eclipse.team.svn.core.utility.FileUtility.addChildren(FileUtility.java:806)
        at org.eclipse.team.svn.core.utility.FileUtility.getResourcesRecursive(FileUtility.java:411)
        at org.eclipse.team.svn.core.utility.FileUtility.getResourcesRecursive(FileUtility.java:406)
        at org.eclipse.team.svn.ui.mapping.UpdateSubscriberContext$3.getResources(UpdateSubscriberContext.java:179)
        at org.eclipse.team.svn.core.operation.local.AbstractWorkingCopyOperation.operableData(AbstractWorkingCopyOperation.java:56)
        at org.eclipse.team.svn.core.operation.local.UpdateOperation.runImpl(UpdateOperation.java:81)
..........................
        at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)



"Worker-9" prio=6 tid=0x560b0000 nid=0xf28 waiting for monitor entry [0x5954f000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.getRegisteredChildren(SVNRemoteStorage.java:367)
        - waiting to lock <0x18c695f8> (a org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage)
        at org.eclipse.team.svn.core.operation.local.GetAllResourcesOperation.runImpl(GetAllResourcesOperation.java:37)
        at org.eclipse.team.svn.core.operation.AbstractActionOperation.run(AbstractActionOperation.java:81)
        at org.eclipse.team.svn.core.operation.LoggedOperation.run(LoggedOperation.java:39)
        at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTask(ProgressMonitorUtility.java:104)
        at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternal(ProgressMonitorUtility.java:90)
        at org.eclipse.team.svn.core.utility.ProgressMonitorUtility.doTaskExternalDefault(ProgressMonitorUtility.java:77)
        at org.eclipse.team.svn.core.utility.FileUtility.getAllMembers(FileUtility.java:820)
        at org.eclipse.team.svn.core.utility.FileUtility.checkForResourcesPresence(FileUtility.java:379)
        at org.eclipse.team.svn.core.utility.FileUtility.checkForResourcesPresenceRecursive(FileUtility.java:348)
        at org.eclipse.team.svn.ui.decorator.SVNLightweightDecorator.getStatus(SVNLightweightDecorator.java:419)
        at org.eclipse.team.svn.ui.decorator.SVNLightweightDecorator.decorateResource(SVNLightweightDecorator.java:226)
        at org.eclipse.team.svn.ui.decorator.SVNLightweightDecorator.decorate(SVNLightweightDecorator.java:193)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
        at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)




"main" prio=6 tid=0x008f6400 nid=0x460 waiting for monitor entry [0x0012e000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage.asLocalResource(SVNRemoteStorage.java:417)
        - waiting to lock <0x18c695f8> (a org.eclipse.team.svn.core.svnstorage.SVNRemoteStorage)
        at org.eclipse.team.svn.core.synchronize.AbstractSVNSubscriber.getSyncInfo(AbstractSVNSubscriber.java:138)
        at org.eclipse.team.svn.ui.synchronize.action.AbstractSynchronizeLogicalModelAction.getFilteredResources(AbstractSynchronizeLogicalModelAction.java:237)
        at org.eclipse.team.svn.ui.synchronize.action.AbstractSynchronizeLogicalModelAction.isEnabledForSelection(AbstractSynchronizeLogicalModelAction.java:67)
        at org.eclipse.team.ui.synchronize.ModelParticipantAction.updateSelection(ModelParticipantAction.java:88)
        at org.eclipse.team.svn.ui.synchronize.action.logicalmodel.OpenInExternalCompareEditorModelAction.updateSelection(OpenInExternalCompareEditorModelAction.java:60)
        at org.eclipse.ui.actions.BaseSelectionListenerAction.selectionChanged(BaseSelectionListenerAction.java:124)
..........................
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 2 Alexander Gurov CLA 2010-12-13 01:40:45 EST
There were no deadlock, it's just that you caused some UI threads waiting for the completion of previously started action. Although it is obviously no good when UI threads waiting for something there are no critical issues like deadlock.