commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Otto Fowler (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (VFS-683) Thread safety issue in VFSClassLoader - NullPointerException thrown
Date Thu, 22 Nov 2018 18:21:00 GMT

    [ https://issues.apache.org/jira/browse/VFS-683?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16696177#comment-16696177
] 

Otto Fowler commented on VFS-683:
---------------------------------

Ok,

So, with your example the issue is that each time you get the tar archive input stream, it
needs to create a new stream, closing the old, so they are taking each other out, which is
because as you state the sample File object is resolving.

 

In the end, the file object content and streams are not going to be thread safe.  The issue,
as you thought is the cache.

Let me see what I can come up with.

> 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
>            Priority: Major
>         Attachments: Main.java
>
>
> 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
(v7.6.3#76005)

Mime
View raw message