felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Glenn Marcy (JIRA)" <j...@apache.org>
Subject [jira] [Created] (FELIX-3838) [DS] Race condition in ImmediateComponentHolder
Date Thu, 03 Jan 2013 22:58:13 GMT
Glenn Marcy created FELIX-3838:
----------------------------------

             Summary: [DS] Race condition in ImmediateComponentHolder
                 Key: FELIX-3838
                 URL: https://issues.apache.org/jira/browse/FELIX-3838
             Project: Felix
          Issue Type: Bug
          Components: Declarative Services (SCR)
    Affects Versions: scr-1.6.2
            Reporter: Glenn Marcy


There is a race condition where one thread is running the BundleComponentActivator
and calling enableComponents on the ImmediateComponentHolder when another thread
is running that has called configurationUpdated.  The first thread is executing
this:

        m_enabled = true;
        final ImmediateComponentManager[] cms = getComponentManagers( false );
        ...
            for ( ImmediateComponentManager cm : cms )
            {
                cm.enable( async );
            }

The second thread is executing this:

                // enable the component if it is initially enabled
                if ( m_enabled && getComponentMetadata().isEnabled() )
                {
                    newIcm.enable( false );
                    ...
                }

                // store the component in the map
                putComponentManager( pid, newIcm );

The failing sequence is this:

The second thread executes the test of m_enabled and it is false, so it will not
enable the component manager expecting that it will be enabled by enableComponents
later when it is called.  The first thread then sets m_enabled to true and gets a
copy of the entries in the map of component managers in order to enable them.  The
second thread puts the component manager into that map, but after the first thread
has already made a copy of the managers in that map, so the component manager the
second thread created will not be enabled at all.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message