[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