Discussion:
[jcifs] jcifs eats InterruptedException
Igor Golikov
2015-02-06 08:23:02 UTC
Permalink
Hi all,

I found that it is impossible to interrupt thread that performs some
operations using jcifs.

Here is an example

java.lang.Object.wait(Object.java:-2)
java.lang.Object.wait(Object.java:503)
jcifs.UniAddress.lookupServerOrWorkgroup(UniAddress.java:176)
<----------- part A
jcifs.UniAddress.getAllByName(UniAddress.java:290)
jcifs.UniAddress.getByName(UniAddress.java:245) <----------- part B
jcifs.smb.Dfs.getTrustedDomains(Dfs.java:62)
jcifs.smb.Dfs.resolve(Dfs.java:167)
jcifs.smb.SmbFile.doConnect(SmbFile.java:902)
jcifs.smb.SmbFile.connect(SmbFile.java:954)
jcifs.smb.SmbFile.connect0(SmbFile.java:880)
jcifs.smb.SmbFile.open0(SmbFile.java:972)
jcifs.smb.SmbFile.open(SmbFile.java:1006)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)


Part A - replacing InterruptedException with UnknownHostException
============================================
...
} catch( InterruptedException ie ) {
throw new UnknownHostException( name );
}
...


Part B - hiding UnknownHostException
============================================
...
} catch (IOException ioe) {
if (log.level >= 3)
ioe.printStackTrace(log);
if (strictView && ioe instanceof SmbAuthException) {
throw (SmbAuthException)ioe;
}
}
...


Why it hides InterruptedException?
Michael B Allen
2015-02-15 03:51:37 UTC
Permalink
Post by Igor Golikov
Hi all,
I found that it is impossible to interrupt thread that performs some
operations using jcifs.
Here is an example
java.lang.Object.wait(Object.java:-2)
java.lang.Object.wait(Object.java:503)
jcifs.UniAddress.lookupServerOrWorkgroup(UniAddress.java:176)
<----------- part A
jcifs.UniAddress.getAllByName(UniAddress.java:290)
jcifs.UniAddress.getByName(UniAddress.java:245) <----------- part B
jcifs.smb.Dfs.getTrustedDomains(Dfs.java:62)
jcifs.smb.Dfs.resolve(Dfs.java:167)
jcifs.smb.SmbFile.doConnect(SmbFile.java:902)
jcifs.smb.SmbFile.connect(SmbFile.java:954)
jcifs.smb.SmbFile.connect0(SmbFile.java:880)
jcifs.smb.SmbFile.open0(SmbFile.java:972)
jcifs.smb.SmbFile.open(SmbFile.java:1006)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:142)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:97)
jcifs.smb.SmbFileOutputStream.<init>(SmbFileOutputStream.java:67)
Part A - replacing InterruptedException with UnknownHostException
============================================
...
} catch( InterruptedException ie ) {
throw new UnknownHostException( name );
}
...
Part B - hiding UnknownHostException
============================================
...
} catch (IOException ioe) {
if (log.level >= 3)
ioe.printStackTrace(log);
if (strictView && ioe instanceof SmbAuthException) {
throw (SmbAuthException)ioe;
}
}
...
Why it hides InterruptedException?
Hi Igor,

Calling Thread.interrupt is a very dubious thing to do. I cannot
recall *every* calling Thread.interrupt in all my years of writing
Java code.

JCIFS probably catches those because it might otherwise leave the
client in a bad state. But I honestly don't recall the exact reason.
That particular code is probably 10 years old.

You might want to rephrase your issue and describe why you want to
call Thread.interrupt in the first place.

Mike
--
Michael B Allen
Java Active Directory Integration
http://www.ioplex.com/
Loading...