Manuel Mall created VFS-823:
-------------------------------

             Summary: Deadlock in SFTP file system
                 Key: VFS-823
                 URL: https://issues.apache.org/jira/browse/VFS-823
             Project: Commons VFS
          Issue Type: Bug
    Affects Versions: 2.9.0
            Reporter: Manuel Mall


Two threads accessing the same (cached) file (SftpFileObject) through the same 
cached SftpFileSystem can cause a deadlock due to the sequence of locks:

Thread 1: locks SftpFileSystem object followed by attempted lock on 
SftpFileObject object
Thread 2: locks SftpFileObject object followed by attempted lock on 
SftpFileSystem object

In the example below Thread 1 does a resolveFile call while Thread 2 does a 
moveTo call in VFS.

Example stack trace:
{{}}
{code:java}
Found one Java-level deadlock:
=============================
"STARS Scheduler_Worker-1":
  waiting to lock monitor 0x000001a2550ccbb0 (object 0x000000008c239030, a 
org.apache.commons.vfs2.provider.sftp.SftpFileObject),
  which is held by "STARS Scheduler_Worker-4""STARS Scheduler_Worker-4":
  waiting to lock monitor 0x000001a248620b70 (object 0x000000008a9806b8, a 
org.apache.commons.vfs2.provider.sftp.SftpFileSystem),
  which is held by "STARS Scheduler_Worker-1"Java stack information for the 
threads listed above:
===================================================
"STARS Scheduler_Worker-1":
        at 
org.apache.commons.vfs2.provider.sftp.SftpFileObject.doDetach(SftpFileObject.java:140)
        - waiting to lock <0x000000008c239030> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileObject)
        at 
org.apache.commons.vfs2.provider.AbstractFileObject.detach(AbstractFileObject.java:484)
        - locked <0x000000008a9806b8> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileSystem)
        at 
org.apache.commons.vfs2.provider.AbstractFileObject.refresh(AbstractFileObject.java:1790)
        at 
org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:344)
        - locked <0x000000008a9806b8> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileSystem)
        at 
org.apache.commons.vfs2.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:307)
        at 
org.apache.commons.vfs2.provider.AbstractFileObject.resolveFile(AbstractFileObject.java:1815)
        at 
au.net.synergy.wts.business.scheduled.services.grms.FileHandlingSupport.findIncomingElectronicFiles(FileHandlingSupport.java:120)
...

"STARS Scheduler_Worker-4":
        at 
org.apache.commons.vfs2.provider.sftp.SftpFileSystem.putChannel(SftpFileSystem.java:350)
        - waiting to lock <0x000000008a9806b8> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileSystem)
        at 
org.apache.commons.vfs2.provider.sftp.SftpFileObject.statSelf(SftpFileObject.java:527)
        - locked <0x000000008c239030> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileObject)
        at 
org.apache.commons.vfs2.provider.sftp.SftpFileObject.getPermissions(SftpFileObject.java:457)
        - locked <0x000000008c239030> (a 
org.apache.commons.vfs2.provider.sftp.SftpFileObject)
        at 
org.apache.commons.vfs2.provider.sftp.SftpFileObject.doIsWriteable(SftpFileObject.java:262)
        at 
org.apache.commons.vfs2.provider.AbstractFileObject.isWriteable(AbstractFileObject.java:1625)
        at 
org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1677)
        at 
au.net.synergy.wts.application.server.grms.GrmsSimulator.publishAsZip(GrmsSimulator.java:295)
...
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to