[ 
https://issues.apache.org/jira/browse/FELIX-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sahoo updated FELIX-2791:
-------------------------

    Attachment: patch.txt

PFA a patch that solves the issue. It introduces a barrier and a flag to make 
sure watcher threads don't run until fileinstall has finished initialisation. 
Please review if you want to, as I plan to commit and make a new release of 
fileinstall ASAP. Thanks.

> NPE in getStartLevel due to race condition
> ------------------------------------------
>
>                 Key: FELIX-2791
>                 URL: https://issues.apache.org/jira/browse/FELIX-2791
>             Project: Felix
>          Issue Type: Bug
>          Components: File Install
>    Affects Versions: fileinstall-3.1.4
>            Reporter: Sahoo
>            Assignee: Sahoo
>            Priority: Blocker
>             Fix For: fileinstall-3.1.6
>
>         Attachments: patch.txt
>
>
> 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?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to