[
https://issues.apache.org/jira/browse/FELIX-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12983773#action_12983773
]
Sahoo commented on FELIX-2791:
------------------------------
Even better would be to synchronize start() and stop() methods in FileInstall
instead of always paying the cost of making the field volatile.
> NPE in getStartLevel
> --------------------
>
> 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
> Priority: Blocker
> Fix For: fileinstall-3.1.6
>
>
> 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.