[jcifs] Why logoff after failed SmbComTreeConnectAndX?
Shon Vella
svella at idauto.net
Tue Dec 3 15:48:47 MST 2013
I’ve been chasing a couple of issues for several days now and finally tracked both of them down to a couple of lines in the exception handler for SmbSession.send():
if (request instanceof SmbComTreeConnectAndX) {
logoff(true);
}
in my case, the SmbComTreeConnectAndX is failing because the share doesn’t exist, in which case the logoff() seems extreme. The logoff does a tree disconnect on all the trees associated with the session, which in turn closes any open files, including named pipes. The initial issue I was trying to track down was named pipe that was being used in another thread that was randomly getting closed prematurely.
The second issue I was trying to track down was sudden spikes in the number of sessions open on the server. I was finally able to duplicate the spikes with a little loop like this:
SmbFile badShare = null;
try {
badShare = new SmbFile("smb://MYSERVER/BOGUS", new NtlmPasswordAuthentication(“MYDOMAIN", "Administrator", “mypassword"));
for (int i = 0; i < 1000; i++) {
try {
System.err.println(i);
badShare.exists();
} catch (SmbException e) {
}
}
} catch (MalformedURLException e) {
}
Which will very quickly cause 1000 sessions to be opened on the server and will cause many other operations to fail with SMB Error 0xC0000205 (STATUS_INSUFF_SERVER_RESOURCES)
I’m not sure why doing the logout on failure of SmbComTreeConnectAndX leaks connections, but by commenting it out, the session count remains steady at 1 from the client machine.
So the big question is why/when would a logoff() be the right thing to do? What is going to break of I remove it completely? Are there specific error codes that would be a good indication that the logoff() is really necessary?
Shon Vella
Developer
iDENTiTYAUTOMATiON
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.samba.org/pipermail/jcifs/attachments/20131203/27133651/attachment.html>
More information about the jCIFS
mailing list