[ 
https://issues.apache.org/jira/browse/FELIX-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12983880#action_12983880
 ] 

Guillaume Nodet commented on FELIX-2791:
----------------------------------------

I don't think the code is reordered, but the ConfigAdminSupport  is actually 
registered before the startLevel service tracker, so if it is called 
synchronously during the registration , the DirectoryWatcher thread might be 
started before the tracker is created.

So I'd rather suggest that the trackers are created and started before the 
ConfigAdmin support, so maybe move the ConfigAdminSupport creation at the end 
of the FileInstall#start() method.

Could you give that a try and see if it avoids the exception?

> 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.

Reply via email to