[jcifs] Re: jcifs-1.2.4 stability fixes

Lars heete hel at admin.de
Tue Oct 4 11:03:16 GMT 2005


Hello,

> > The current SmbTransport actually has a deadlock in the paths
> > doSend->disconnect (first rmap lock then transport lock) and
> > sessionSetup->send (first transport lock then rmap lock).
> > This is fixed doing the error handling only in the transport thread.
>
> I don't know about this. I think logic actually prevents this from
> ever happening because doSend() cannot be called without first doing
> a sessionSetup(). So you either do sessionSetup() and then send() but a
> subsequent sessionSetup() will just return because the session is already
> "setup".
>
> I agree it looks dangerous as hell and should probably be changed but
> at the moment I'd like to leave it alone because technically I do not
> think it can actually deadlock. If you can get it to happen, please send
> me a thread dump.
attached is the thread dump of this deadlock with jcifs-1.2.5. It can be 
triggered using several busy crawler sessions and disconnecting the transport 
via mmc on the server side.

Lars

Lars
-------------- next part --------------
Found one Java-level deadlock:
=============================
"Thread-83":
  waiting to lock monitor 0x0942cdd4 (object 0xabd0d050, a java.util.HashMap),
  which is held by "Thread-82"
"Thread-82":
  waiting to lock monitor 0x0942ce7c (object 0xabd0cf68, a jcifs.smb.SmbTransport),
  which is held by "Thread-83"

Java stack information for the threads listed above:
===================================================
"Thread-83":
        at jcifs.util.transport.Transport.sendrecv(Transport.java:63)
        - waiting to lock <0xabd0d050> (a java.util.HashMap)
        at jcifs.smb.SmbTransport.send(SmbTransport.java:580)
        at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:264)
        - locked <0xabd0cf68> (a jcifs.smb.SmbTransport)
        at jcifs.smb.SmbSession.send(SmbSession.java:223)
        at jcifs.smb.SmbTree.treeConnect(SmbTree.java:144)
        - locked <0xabd0cf68> (a jcifs.smb.SmbTransport)
        at jcifs.smb.SmbFile.connect(SmbFile.java:792)
        at jcifs.smb.SmbFile.connect0(SmbFile.java:762)
        at jcifs.smb.SmbFile.send(SmbFile.java:660)
        at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1684)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1575)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1483)
        at SmbThreadTest.traverse(SmbThreadTest.java:42)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.run(SmbThreadTest.java:97)
"Thread-82":
        at jcifs.util.transport.Transport.disconnect(Transport.java:189)
        - waiting to lock <0xabd0cf68> (a jcifs.smb.SmbTransport)
        at jcifs.smb.SmbTransport.doSend0(SmbTransport.java:408)
        at jcifs.smb.SmbTransport.send(SmbTransport.java:546)
        - locked <0xabd0d050> (a java.util.HashMap)
        at jcifs.smb.SmbSession.send(SmbSession.java:229)
        at jcifs.smb.SmbTree.send(SmbTree.java:102)
        at jcifs.smb.SmbFile.send(SmbFile.java:688)
        at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1684)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1575)
        at jcifs.smb.SmbFile.listFiles(SmbFile.java:1483)
        at SmbThreadTest.traverse(SmbThreadTest.java:42)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.traverse(SmbThreadTest.java:63)
        at SmbThreadTest.run(SmbThreadTest.java:97)

Found 1 deadlock.



More information about the jcifs mailing list