[
https://issues.apache.org/jira/browse/FELIX-2791?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12984069#action_12984069
]
Sahoo edited comment on FELIX-2791 at 1/20/11 6:46 AM:
-------------------------------------------------------
I now see why the watcher thread can be started because of configuration event.
In any case, introducing a barrier is better way to ensure that watcher threads
are not active before fileinstall is initialized. So, I am committing the patch.
Sending
fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
Sending
fileinstall/src/main/java/org/apache/felix/fileinstall/internal/FileInstall.java
Transmitting file data ..
Committed revision 1061240.
was (Author: sahoo):
The exception is about startLevel being null. Where is configAdmin coming
into picture?
> 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.