ConfigAdmin implementation is not thread-safe
---------------------------------------------

                 Key: FELIX-1477
                 URL: https://issues.apache.org/jira/browse/FELIX-1477
             Project: Felix
          Issue Type: Bug
          Components: Configuration Admin
    Affects Versions: configadmin-1.0.10
            Reporter: Andy Wilkinson


I've been doing some work with ConfigAdmin in a multi-threaded environment and 
have come across a number of issues caused by thread safety problems. The 
symptoms are typically either an IllegalStateException from 
ConfiguationAdapter.checkDeleted when, in fact, the Configuration has not been 
deleted, or a NPE, where PersistenceManager is checked once for being non-null, 
and the used again without re-checking for it having been nulled out, e.g. due 
to concurrent invocations of delete and update.

I tracked down a common cause of the IllegalStateException from checkDeleted to 
FilePersistenceManager's exists method. If exists is called on one thread while 
store (for an update) is being run on another, the rename can cause exists to 
incorrectly return false. synchronizing on this in exists appears to resolve 
this problem.

I've produced a patch that goes someway to improve the thread-safety, although 
I does not make the implementation completely thread-safe. Without the patch in 
place I was seeing a failure about one run in three. Since applying the patch I 
have yet to see a failure after more than 100 runs.

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