Deadlock occurs in HTTP or WebDAV when all the connections are in use.
----------------------------------------------------------------------

                 Key: VFS-343
                 URL: https://issues.apache.org/jira/browse/VFS-343
             Project: Commons VFS
          Issue Type: Bug
            Reporter: Ralph Goers


The stacktrace below shows several threads all waiting on a FileSystem lock. 
The thread holding that lock is waiting for an HTTP connection from the 
connection pool. However, each of the threads waiting on the FileSystem lock 
has already acquired a connection from the pool.  This issue can be resolved by 
reducing the amount of locking that occurs on the FileSystem objects. In this 
case the threads are attempting to get the lock to increment a counter. 
Changing the counters to AtomicIntegers will resolve the problem.

Full thread dump Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode):

"Attach Listener" daemon prio=10 tid=0x0000000053834400 nid=0x23b1 waiting on 
condition [0x0000000000000000..0x0000000000000000]
  java.lang.Thread.State: RUNNABLE

"MultiThreadedHttpConnectionManager cleanup" daemon prio=10 
tid=0x00000000538ff400 nid=0x21f0 in Object.wait() 
[0x000000004077e000..0x000000004077ec10]
  java.lang.Thread.State: TIMED_WAITING (on object monitor)
       at java.lang.Object.wait(Native Method)
       - waiting on <0x00002aab82694428> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
       - locked <0x00002aab82694428> (a java.lang.ref.ReferenceQueue$Lock)
       at 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ReferenceQueueThread.run(MultiThreadedHttpConnectionManager.java:1082)

"Thread 2" prio=10 tid=0x00002aabc00a0800 nid=0x21ef waiting for monitor entry 
[0x0000000040d17000..0x0000000040d17c90]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"Thread 3" prio=10 tid=0x00002aabc009f800 nid=0x21ec in Object.wait() 
[0x0000000042593000..0x0000000042593d10]
  java.lang.Thread.State: WAITING (on object monitor)
       at java.lang.Object.wait(Native Method)
       - waiting on <0x00002aab826c67a8> (a 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
       at 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:509)
       - locked <0x00002aab826c67a8> (a 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool)
       at 
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:394)
       at 
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:152)
       at 
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
       at 
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.execute(WebdavFileObject.java:349)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperties(WebdavFileObject.java:442)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperties(WebdavFileObject.java:417)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperty(WebdavFileObject.java:410)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.getProperty(WebdavFileObject.java:402)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.isDirectory(WebdavFileObject.java:382)
       at 
org.apache.commons.vfs.provider.webdav.WebdavFileObject.doGetType(WebdavFileObject.java:112)
       at 
org.apache.commons.vfs.provider.AbstractFileObject.getType(AbstractFileObject.java:441)
       - locked <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.AbstractFileObject.exists(AbstractFileObject.java:424)
       at 
org.apache.commons.configuration.VFSFileSystem.locateFromURL(VFSFileSystem.java:293)
       at 
org.apache.commons.configuration.ConfigurationUtils.locate(ConfigurationUtils.java:466)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:245)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"Thread 4" prio=10 tid=0x00002aabc00ce000 nid=0x21eb waiting for monitor entry 
[0x0000000042492000..0x0000000042492d90]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"Thread 5" prio=10 tid=0x00002aabc00d2000 nid=0x21ea waiting for monitor entry 
[0x0000000042391000..0x0000000042391a10]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"Thread 6" prio=10 tid=0x00002aabc00af400 nid=0x21e9 waiting for monitor entry 
[0x0000000042290000..0x0000000042290a90]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.resolveFile(AbstractFileSystem.java:294)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:86)
       at 
org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:66)
       at 
org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:692)
       at 
org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:648)
       at 
org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:604)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:99)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"Thread 7" prio=10 tid=0x00002aabc001cc00 nid=0x21e8 waiting for monitor entry 
[0x000000004218f000..0x000000004218fb10]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at java.lang.Thread.run(Thread.java:619)

"org.apache.commons.vfs.cache.SoftRefFilesCache$SoftRefReleaseThread" daemon 
prio=10 tid=0x00002aabc001ec00 nid=0x21e7 in Object.wait() 
[0x000000004208e000..0x000000004208eb90]
  java.lang.Thread.State: TIMED_WAITING (on object monitor)
       at java.lang.Object.wait(Native Method)
       - waiting on <0x00002aaabe1f0198> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
       - locked <0x00002aaabe1f0198> (a java.lang.ref.ReferenceQueue$Lock)
       at 
org.apache.commons.vfs.cache.SoftRefFilesCache$SoftRefReleaseThread.run(SoftRefFilesCache.java:79)

"Low Memory Detector" daemon prio=10 tid=0x000000005360bc00 nid=0x21e4 runnable 
[0x0000000000000000..0x0000000000000000]
  java.lang.Thread.State: RUNNABLE

"CompilerThread1" daemon prio=10 tid=0x0000000053609000 nid=0x21e3 waiting on 
condition [0x0000000000000000..0x0000000041d8a4c0]
  java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x0000000053605400 nid=0x21e2 waiting on 
condition [0x0000000000000000..0x000000004165c5d0]
  java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x0000000053603400 nid=0x21e1 runnable 
[0x0000000000000000..0x0000000040ed66a0]
  java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=10 tid=0x00000000535e0c00 nid=0x21e0 in Object.wait() 
[0x000000004155c000..0x000000004155ca90]
  java.lang.Thread.State: WAITING (on object monitor)
       at java.lang.Object.wait(Native Method)
       - waiting on <0x00002aaabe1f0278> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
       - locked <0x00002aaabe1f0278> (a java.lang.ref.ReferenceQueue$Lock)
       at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
       at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00000000535df000 nid=0x21df in 
Object.wait() [0x000000004145b000..0x000000004145bb10]
  java.lang.Thread.State: WAITING (on object monitor)
       at java.lang.Object.wait(Native Method)
       - waiting on <0x00002aaabe1f2370> (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 <0x00002aaabe1f2370> (a java.lang.ref.Reference$Lock)

"Thread 1" prio=10 tid=0x0000000053427400 nid=0x21d5 waiting for monitor entry 
[0x00000000412af000..0x00000000412afed0]
  java.lang.Thread.State: BLOCKED (on object monitor)
       at 
org.apache.commons.vfs.provider.AbstractFileSystem.streamOpened(AbstractFileSystem.java:602)
       - waiting to lock <0x00002aab827f92c8> (a 
org.apache.commons.vfs.provider.webdav.WebdavFileSystem)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.streamOpened(DefaultFileContent.java:93)
       at 
org.apache.commons.vfs.provider.DefaultFileContent.getInputStream(DefaultFileContent.java:373)
       at 
org.apache.commons.configuration.VFSFileSystem.getInputStream(VFSFileSystem.java:111)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:311)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:251)
       at 
org.apache.commons.configuration.AbstractFileConfiguration.load(AbstractFileConfiguration.java:229)
       at 
org.apache.commons.configuration.AbstractHierarchicalFileConfiguration.load(AbstractHierarchicalFileConfiguration.java:180)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClientProduct(ConfigurationSynchronizer.java:862)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.synchronizeClient(ConfigurationSynchronizer.java:829)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.run(ConfigurationSynchronizer.java:416)
       at 
com.diginsite.services.configsync.ConfigurationSynchronizer.main(ConfigurationSynchronizer.java:1790)

"VM Thread" prio=10 tid=0x00000000535d9800 nid=0x21de runnable 

"GC task thread#0 (ParallelGC)" prio=10 tid=0x0000000053432000 nid=0x21d6 
runnable 

"GC task thread#1 (ParallelGC)" prio=10 tid=0x0000000053433800 nid=0x21d7 
runnable 

"GC task thread#2 (ParallelGC)" prio=10 tid=0x0000000053435400 nid=0x21d8 
runnable 

"GC task thread#3 (ParallelGC)" prio=10 tid=0x0000000053436c00 nid=0x21d9 
runnable 

"GC task thread#4 (ParallelGC)" prio=10 tid=0x0000000053438400 nid=0x21da 
runnable 

"GC task thread#5 (ParallelGC)" prio=10 tid=0x000000005343a000 nid=0x21db 
runnable 

"GC task thread#6 (ParallelGC)" prio=10 tid=0x000000005343b800 nid=0x21dc 
runnable 

"GC task thread#7 (ParallelGC)" prio=10 tid=0x000000005343d000 nid=0x21dd 
runnable 

"VM Periodic Task Thread" prio=10 tid=0x000000005360e000 nid=0x21e5 waiting on 
condition 

JNI global references: 902


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to