[jcifs] bugs in JCIFS 1.2.9
Michael B Allen
mba2000 at ioplex.com
Wed Nov 29 18:36:43 GMT 2006
Well we'll never know unless you can get a thread dump.
Mike
On Wed, 29 Nov 2006 18:51:48 +0100
"Tim Struyf" <tim.struyf at roots.be> wrote:
> Mike,
>
> I ran your testcase and I get the same output as your email below, if i run it from the console!
>
> However if I run this testcase in eclipse in debug mode I still see a lot of writer threads, all in object.wait() , waiting for a notify().
> So I believe there might still be something wrong... (at least if you trust the eclipse debugger...)
>
> i find it very weird that eclipse is showing these threads...
> (with the w.interrupt implemented, these threads get closed correctly and no threads remain in object.wait)
>
> regards,
> Tim
>
> ________________________________
>
> Van: Michael B Allen [mailto:mba2000 at ioplex.com]
> Verzonden: vr 24/11/2006 17:24
> Aan: Tim Struyf
> CC: jcifs at lists.samba.org
> Onderwerp: Re: [jcifs] bugs in JCIFS 1.2.9
>
>
>
> The following thread should cause the writer thread to exit.
>
> 2139 try {
> 2140 copyTo0( dest, b, bsize, w, req, resp );
> 2141 } finally {
> 2142 w.write( null, -1, null, 0 );
> 2143 }
>
> I cannot reproduce this problem. I think you are confusing the writer
> thread with the Transport threads. You will need to get a thread dump
> to verify this.
>
> Run the attached example like:
>
> $ java -Djcifs.properties=../miallen.prp CopyToTest smb://ts0.win.net/tmp/bogus.txt smb://nano.foo.net/pub/bogus.txt
> jcifs.smb.SmbException: The system cannot find the file specified.
> at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:511)
> at jcifs.smb.SmbTransport.send(SmbTransport.java:588)
> at jcifs.smb.SmbSession.send(SmbSession.java:239)
> at jcifs.smb.SmbTree.send(SmbTree.java:109)
> at jcifs.smb.SmbFile.send(SmbFile.java:690)
> at jcifs.smb.SmbFile.queryPath(SmbFile.java:1202)
> at jcifs.smb.SmbFile.copyTo0(SmbFile.java:1950)
> at jcifs.smb.SmbFile.copyTo(SmbFile.java:2140)
> at CopyToTest.run(CopyToTest.java:17)
>
> <get a thread dump [1]>
>
> Full thread dump Java HotSpot(TM) Client VM (1.4.2_08-b03 mixed mode):
>
> "Transport2" daemon prio=1 tid=0x093bbae8 nid=0x3eea runnable [4be3000..4be4228]
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.read(SocketInputStream.java:129)
> at jcifs.util.transport.Transport.readn(Transport.java:29)
> at jcifs.smb.SmbTransport.peekKey(SmbTransport.java:352)
> at jcifs.util.transport.Transport.loop(Transport.java:100)
> at jcifs.util.transport.Transport.run(Transport.java:261)
> at java.lang.Thread.run(Thread.java:534)
>
> "Transport1" daemon prio=1 tid=0x093b77d0 nid=0x3eea runnable [2ef6000..2ef7228]
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.read(SocketInputStream.java:129)
> at jcifs.util.transport.Transport.readn(Transport.java:29)
> at jcifs.smb.SmbTransport.peekKey(SmbTransport.java:352)
> at jcifs.util.transport.Transport.loop(Transport.java:100)
> at jcifs.util.transport.Transport.run(Transport.java:261)
> at java.lang.Thread.run(Thread.java:534)
>
> "Signal Dispatcher" daemon prio=1 tid=0x0925d8d8 nid=0x3eea waiting on condition [0..0]
>
> "Finalizer" daemon prio=1 tid=0x09248e38 nid=0x3eea in Object.wait() [5a6000..5a6228]
> at java.lang.Object.wait(Native Method)
> - waiting on <0xae3573f0> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
> - locked <0xae3573f0> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
>
> "Reference Handler" daemon prio=1 tid=0x09248290 nid=0x3eea in Object.wait() [4eb000..4eb228]
> at java.lang.Object.wait(Native Method)
> - waiting on <0xae357290> (a java.lang.ref.Reference$Lock)
> at java.lang.Object.wait(Object.java:429)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
> - locked <0xae357290> (a java.lang.ref.Reference$Lock)
>
> "main" prio=1 tid=0x092129a0 nid=0x3eea waiting on condition [bff37000..bff3729c]
> at java.lang.Thread.sleep(Native Method)
> at CopyToTest.main(CopyToTest.java:27)
>
> "VM Thread" prio=1 tid=0x09247030 nid=0x3eea runnable
>
> "VM Periodic Task Thread" prio=1 tid=0x092600d8 nid=0x3eea waiting on condition
> "Suspend Checker Thread" prio=1 tid=0x0925cf20 nid=0x3eea runnable
>
> You can see above there is no "JCIFS-WriterThread" listed.
>
> Now wait 20 seconds for the Transport threads to exit and do a thread
> dump again:
>
> Full thread dump Java HotSpot(TM) Client VM (1.4.2_08-b03 mixed mode):
>
> "Signal Dispatcher" daemon prio=1 tid=0x0925d8d8 nid=0x3eea runnable [0..0]
>
> "Finalizer" daemon prio=1 tid=0x09248e38 nid=0x3eea in Object.wait() [5a6000..5a6228]
> at java.lang.Object.wait(Native Method)
> - waiting on <0xae3573f0> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
> - locked <0xae3573f0> (a java.lang.ref.ReferenceQueue$Lock)
> at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
> at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
>
> "Reference Handler" daemon prio=1 tid=0x09248290 nid=0x3eea in Object.wait() [4eb000..4eb228]
> at java.lang.Object.wait(Native Method)
> - waiting on <0xae357290> (a java.lang.ref.Reference$Lock)
> at java.lang.Object.wait(Object.java:429)
> at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
> - locked <0xae357290> (a java.lang.ref.Reference$Lock)
>
> "main" prio=1 tid=0x092129a0 nid=0x3eea waiting on condition [bff37000..bff3729c]
> at java.lang.Thread.sleep(Native Method)
> at CopyToTest.main(CopyToTest.java:27)
>
> "VM Thread" prio=1 tid=0x09247030 nid=0x3eea runnable
>
> "VM Periodic Task Thread" prio=1 tid=0x092600d8 nid=0x3eea waiting on condition
> "Suspend Checker Thread" prio=1 tid=0x0925cf20 nid=0x3eea runnable
>
> Now you can see only VM threads are left.
>
> AFAICT everything is working perfectly.
>
> Or just try to add a 20 second sleep to your test and you'll see the
> Transport threads exit. You can make them close quicker by reducing
> jcifs.smb.client.soTimeout.
>
> Mike
>
> [1] To get a thread dump on Windows, run your program on the console
> and press <ctrl><break> (on Unix it's <ctrl>\).
>
>
--
Michael B Allen
PHP Active Directory SSO
http://www.ioplex.com/
More information about the jcifs
mailing list