You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Gary D. Gregory (Jira)" <ji...@apache.org> on 2022/09/04 15:38:00 UTC
[jira] [Commented] (VFS-683) Thread safety issue in VFSClassLoader - NullPointerException thrown
[ https://issues.apache.org/jira/browse/VFS-683?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17600074#comment-17600074 ]
Gary D. Gregory commented on VFS-683:
-------------------------------------
I don't think there is an expectation of failure, but I do not think multi-threading was baked in the design and coding initially. While we have changed the code in an ad-hoc manner here and there over the years to avoid multi-threading issues, it is still the case unless something is actually documented as thread-safe and/or immutable, you should not assume it is safe to use in a multi-threading context.
> Thread safety issue in VFSClassLoader - NullPointerException thrown
> -------------------------------------------------------------------
>
> Key: VFS-683
> URL: https://issues.apache.org/jira/browse/VFS-683
> Project: Commons VFS
> Issue Type: Bug
> Affects Versions: 2.2
> Reporter: Daryl Odnert
> Assignee: Gary D. Gregory
> Priority: Major
> Attachments: Main.java
>
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> In my application, I have two instances of the {{VFSClassLoader}}, each of which is being used in a distinct thread. Both {{VFSClassLoader}} instances refer to the same compressed file resource described by a {{FileObject}} that is passed to the class loader's constructor. Intermittently, the application throws an exception with the stack trace shown below. So, there seems to be either a race condition in the code or an undocumented assumption here. If it is unsupported for two {{VFSClassLoader}} instances to refer to the same resource (file), then that assumption should be documented. But if that is not the case, then there is a race condition bug in the implementation.
> {noformat}
> 43789 WARN {} c.a.e.u.PreferredPathClassLoader - While loading class org.apache.hive.jdbc.HiveDatabaseMetaData, rethrowing unexpected java.lang.NullPointerException: Inflater has been closed
> java.lang.NullPointerException: Inflater has been closed
> at java.util.zip.Inflater.ensureOpen(Inflater.java:389)
> at java.util.zip.Inflater.inflate(Inflater.java:257)
> at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:152)
> at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
> at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
> at org.apache.commons.vfs2.util.MonitorInputStream.read(MonitorInputStream.java:91)
> at org.apache.commons.vfs2.FileUtil.getContent(FileUtil.java:47)
> at org.apache.commons.vfs2.impl.Resource.getBytes(Resource.java:102)
> at org.apache.commons.vfs2.impl.VFSClassLoader.defineClass(VFSClassLoader.java:179)
> at org.apache.commons.vfs2.impl.VFSClassLoader.findClass(VFSClassLoader.java:150)
> at com.atscale.engine.utils.PreferredPathClassLoader.findClass(PreferredPathClassLoader.scala:54)
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)