[jcifs] Raise Condition in SmbFile.java
David Fahlander
dfahlander at hotmail.com
Wed Jun 2 09:04:23 GMT 2004
Dear colleagues, you only need to read a book about thread programming to
see the that it is a bug. You always have to signal when a state has changed
before you go into a wait! (In SmbFile.WriterThread.run() after setting
ready = true).
Except this error, I really adore the libraries (jcifs and smbdav). Easy to
come in to and very usable. Thanks guys!
This is what happened:
1) The Davenport servlet hanged after some frequently HTTP MOVE commands
(which in it's turn used the SmbFile.copyTo() command)
2) I stopped all threads and found one thread that was waiting infinitely
for 'ready' to become true in SmbFile.copyTo0() (while ( !w.ready )
{w.wait()} ). This happened several times when I tested... always the same
location.
3) I found the error (which to me obviously breaks the way of how to do
thread communications).
4) The davenport servlet stopped hanging on MOVE commands after applying my
patch!
/David
-----Original Message-----
From: Michael B Allen [mailto:mba2000 at ioplex.com]
Sent: den 2 juni 2004 00:44
To: David Fahlander
Cc: jcifs at samba.org
Subject: Re: [jcifs] Raise Condition in SmbFile.java
David Fahlander said:
> The bug is that it may hang infinitely when for example calling
> SmbFile.copyTo(). This only happens sometimes though since it is a race
> condition. notify() must be called directly after changing ready = true,
> otherwise other threads can wait for ever for a notification that it is
> writeable.
>From this description I'm not convinced. If you are observing a deadlock
then post a thread dump (Ctrl-Break on Win32 or Ctrl-\ on *NIX I believe).
Mike
More information about the jcifs
mailing list