Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-2791

NPE in getStartLevel due to race condition

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Fixed
    • fileinstall-3.1.4
    • fileinstall-3.1.6
    • File Install
    • None

    Description

      We are using FileInstall 3.1.4 and one of our user is seeing the following exception repeated in the directory watcher main loop continuously:

      java.lang.NullPointerException
      at org.apache.felix.fileinstall.internal.FileInstall.getStartLevel(FileInstall.java:283)
      at org.apache.felix.fileinstall.internal.FileInstall.getStartLevel(FileInstall.java:276)
      at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:237)
      In main loop, we have serious trouble: java.lang.NullPointerException

      NPE comes from FileInstall.java:283, which looks like this:
      return (StartLevel) startLevel.waitForService(timeout);

      It looks like a concurrency bug to me in FileInstall. The only explanation that I have so far is that in the target environment, code is getting reordered and hence directory watcher thread is spwaned before startLevel is initialzed.. Since startLevel is not declared volatile, nor is it accessed from a synchronized block, DirectoryWatcher thread continues to see the stale value.

      So, I suggest we change startLevel to a volatile field. Any comments?

      Attachments

        1. patch.txt
          2 kB
          Sanjeeb Kumar Sahoo

        Activity

          People

            sahoo Sanjeeb Kumar Sahoo
            sahoo Sanjeeb Kumar Sahoo
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: