[ 
https://issues.apache.org/jira/browse/ARIES-1732?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16112475#comment-16112475
 ] 

Paolo Antinori commented on ARIES-1732:
---------------------------------------

I am statically reviewing the code and I don't think to see a direct link with 
ConfigAdmin service presence.

The main issues were tied to the writing of 
{{CmPropertyPlaceholder.initialized}} that in the unhappy path scenario, was 
already set to {{true}}, even if an initial call to {{updated()}} was sending 
around a null Dictionary object, happening in the cases when ConfigAdmin thread 
kicks in too early.

As far as I can see, {{initialized}} is a private property of 
{{CmPropertyPlaceholder}}, so, not impacting any superclass, and it's used only 
in the context of the update method here:

https://github.com/apache/aries/blob/10ba56a3a1d292e11b78120486f0f7b55cd6af54/blueprint/blueprint-cm/src/main/java/org/apache/aries/blueprint/compendium/cm/CmPropertyPlaceholder.java#L126-L133

{code:java}
    public void updated(Dictionary props) {
        LOGGER.debug("Invoking updated() with properties {}", props);
        if (!initialized && props != null) {
            LOGGER.debug("Initializing properties");
            properties = props;
            initialized = true;
            return;
        }
...
{code}

I don't see anything risking to block or to skip any lifecycle step.



> blueprint-cm - race condition
> -----------------------------
>
>                 Key: ARIES-1732
>                 URL: https://issues.apache.org/jira/browse/ARIES-1732
>             Project: Aries
>          Issue Type: Bug
>          Components: Blueprint
>            Reporter: Paolo Antinori
>
> There is a possible race condition in 
> `org.apache.aries.blueprint.compendium.cm.CmPropertyPlaceholder` and 
> `org.apache.aries.blueprint.compendium.cm.ManagedObjectManager`
> There are situations where `ConfigAdmin` service might not be available and 
> returns `null` when queried for the initial `config`.
> In other cases instead, `CmPropertyPlaceholder` receives updates from 
> `ConfigAdmin` thread even before it has completed it's initialization.
> The code doesn't discriminate if `config` is `null` or not, and treats any 
> value as valid, marking `CmPropertyPlaceholder` instance as initialized.
> This leads to spotty errors.
> The suggested fix, that simply prevents that `update(null)` invocation mark 
> the `CmPropertyPlaceholder` instance as initialized, addresses the issue.
> Code here:
> https://github.com/apache/aries/compare/trunk...paoloantinori:ENTESB-7141?expand=1



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to