[jcifs] Possible deadlocking between jcifs.smb.Dfs and jcifs.smb.SmbTransport

Xavier Roche roche+kml2 at exalead.com
Wed Mar 7 00:24:22 MST 2012


Hi folks,

On 03/07/2012 03:09 AM, Michael B Allen wrote:
> Your soTimeout value of is borderline invalid. That soTimeout means
> that if no response is received within 100 ms the socket will close.
> And your responseTimeout is pointless if the soTimeout is less than
> the responseTimeout.

I removed the bogus Config.* lines (they were intended to increase the 
deadlocking odds), but the deadlock is still reproducible.

> Also your line numbers don't match the stock package.

Sorry, I cleaned up a bit the source. Here is the new one attached.

> But if it's not too much trouble it would be great if you could also
> post a thread dump when your "Deadlock detected!" condition is
> reached. At least it would be a little more impressive if a thread
> dump reported the deadlock too.

Sure -- here is another one:

** Deadlock detected! **
The following thread:
Thread #21 (Transport5) group="main" state="BLOCKED" priority="5" 
daemon="true" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.util.transport.Transport.loop(Transport.java:99)
         jcifs.util.transport.Transport.run(Transport.java:267)
         java.lang.Thread.run(Thread.java:662)

has been blocked for 0s by:
Thread #15 (Thread-7) group="main" state="BLOCKED" priority="5" 
daemon="false" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.smb.Dfs.insert(Dfs.java:289)
         jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:556)
         jcifs.smb.SmbTransport.send(SmbTransport.java:640)
         jcifs.smb.SmbSession.send(SmbSession.java:238)
         jcifs.smb.SmbTree.send(SmbTree.java:119)
         jcifs.smb.SmbFile.send(SmbFile.java:775)
         jcifs.smb.SmbFile.queryPath(SmbFile.java:1363)
         jcifs.smb.SmbFile.exists(SmbFile.java:1417)
         jcifs.smb.SmbFile.isDirectory(SmbFile.java:1490)
 
test.deadlock.SmbStressTest$FileScanner.scanFiles(SmbStressTest.java:80)
         test.deadlock.SmbStressTest$FileScanner.run(SmbStressTest.java:39)


The following thread:
Thread #15 (Thread-7) group="main" state="BLOCKED" priority="5" 
daemon="false" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.smb.Dfs.insert(Dfs.java:289)
         jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:556)
         jcifs.smb.SmbTransport.send(SmbTransport.java:640)
         jcifs.smb.SmbSession.send(SmbSession.java:238)
         jcifs.smb.SmbTree.send(SmbTree.java:119)
         jcifs.smb.SmbFile.send(SmbFile.java:775)
         jcifs.smb.SmbFile.queryPath(SmbFile.java:1363)
         jcifs.smb.SmbFile.exists(SmbFile.java:1417)
         jcifs.smb.SmbFile.isDirectory(SmbFile.java:1490)
 
test.deadlock.SmbStressTest$FileScanner.scanFiles(SmbStressTest.java:80)
         test.deadlock.SmbStressTest$FileScanner.run(SmbStressTest.java:39)

has been blocked for 0s by:
Thread #9 (Thread-1) group="main" state="BLOCKED" priority="5" 
daemon="false" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.smb.SmbTransport.getSmbSession(SmbTransport.java:126)
         jcifs.smb.SmbTransport.getDfsReferrals(SmbTransport.java:701)
         jcifs.smb.Dfs.getReferral(Dfs.java:143)
         jcifs.smb.Dfs.resolve(Dfs.java:191)
         jcifs.smb.SmbFile.doConnect(SmbFile.java:902)
         jcifs.smb.SmbFile.connect(SmbFile.java:954)
         jcifs.smb.SmbFile.connect0(SmbFile.java:880)
         jcifs.smb.SmbFile.exists(SmbFile.java:1415)
 
test.deadlock.SmbStressTest$FileScanner.scanFiles(SmbStressTest.java:89)
         test.deadlock.SmbStressTest$FileScanner.run(SmbStressTest.java:39)


The following thread:
Thread #9 (Thread-1) group="main" state="BLOCKED" priority="5" 
daemon="false" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.smb.SmbTransport.getSmbSession(SmbTransport.java:126)
         jcifs.smb.SmbTransport.getDfsReferrals(SmbTransport.java:701)
         jcifs.smb.Dfs.getReferral(Dfs.java:143)
         jcifs.smb.Dfs.resolve(Dfs.java:191)
         jcifs.smb.SmbFile.doConnect(SmbFile.java:902)
         jcifs.smb.SmbFile.connect(SmbFile.java:954)
         jcifs.smb.SmbFile.connect0(SmbFile.java:880)
         jcifs.smb.SmbFile.exists(SmbFile.java:1415)
 
test.deadlock.SmbStressTest$FileScanner.scanFiles(SmbStressTest.java:89)
         test.deadlock.SmbStressTest$FileScanner.run(SmbStressTest.java:39)

has been blocked for 0s by:
Thread #15 (Thread-7) group="main" state="BLOCKED" priority="5" 
daemon="false" alive="true" interrupted="false" 
classLoader="sun.misc.Launcher$AppClassLoader"
         jcifs.smb.Dfs.insert(Dfs.java:289)
         jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:556)
         jcifs.smb.SmbTransport.send(SmbTransport.java:640)
         jcifs.smb.SmbSession.send(SmbSession.java:238)
         jcifs.smb.SmbTree.send(SmbTree.java:119)
         jcifs.smb.SmbFile.send(SmbFile.java:775)
         jcifs.smb.SmbFile.queryPath(SmbFile.java:1363)
         jcifs.smb.SmbFile.exists(SmbFile.java:1417)
         jcifs.smb.SmbFile.isDirectory(SmbFile.java:1490)
 
test.deadlock.SmbStressTest$FileScanner.scanFiles(SmbStressTest.java:80)
         test.deadlock.SmbStressTest$FileScanner.run(SmbStressTest.java:39)


Thanks for investigating,

Xavier
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SmbStressTest.java
Type: text/x-java
Size: 11532 bytes
Desc: not available
URL: <http://lists.samba.org/pipermail/jcifs/attachments/20120307/c3a16ce9/attachment.java>


More information about the jCIFS mailing list