Uploaded image for project: 'Commons VFS'
  1. Commons VFS
  2. VFS-683

Thread safety issue in VFSClassLoader - NullPointerException thrown

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.2
    • 2.10.0
    • None

    Description

      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.

      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)
      

      Attachments

        1. Main.java
          2 kB
          Daryl Odnert

        Issue Links

          Activity

            People

              ggregory Gary D. Gregory
              daryl.odnert Daryl Odnert
              Votes:
              1 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h
                  2h