Intermittent exception during Felix shutdown
--------------------------------------------

                 Key: FELIX-341
                 URL: https://issues.apache.org/jira/browse/FELIX-341
             Project: Felix
          Issue Type: Bug
          Components: Declarative Services
    Affects Versions: 1.0.0
            Reporter: Rajini Sivaram


One of my testcases intermittently throws an exception during shutdown. I have 
managed to recreate the exception under a debugger, and it shows two threads 
trying to unregister the same service. The test fails only when declarative 
services are used. I am using Felix 1.0.0 framework and the latest snapshot of 
SCR. The test uses multiple versions of a bundle, but I am not sure if that has 
anything to do with the exception.
 
The exception thrown is:
 
    --- Exception with component : Unexpected problem executing task ---
    java.lang.IllegalStateException: Service already unregistered.
        at org.apache.felix.framework.ServiceRegistrationImpl.unregister 
(ServiceRegistrationImpl.java:105)
        at 
org.apache.felix.scr.AbstractComponentManager.unregisterComponentService(AbstractComponentManager.java:503)
        at org.apache.felix.scr.AbstractComponentManager.deactivateInternal 
(AbstractComponentManager.java:369)
        at 
org.apache.felix.scr.AbstractComponentManager.access$200(AbstractComponentManager.java:55)
        at 
org.apache.felix.scr.AbstractComponentManager$3.run(AbstractComponentManager.java
 :176)
        at 
org.apache.felix.scr.ComponentActorThread.run(ComponentActorThread.java:81)
 
Here is the stack trace of the two threads under the debugger (both are using 
the same object):
 
                Thread [FelixStartLevel] (Suspended (breakpoint at line 97 in 
ServiceRegistrationImpl))
                        ServiceRegistrationImpl.unregister() line: 97
                        ServiceRegistry.unregisterServices (Bundle) line: 119
                        Felix._stopBundle(FelixBundle, boolean) line: 1946
                        Felix.stopBundle(FelixBundle, boolean) line: 1866
                        Felix.setFrameworkStartLevel (int) line: 1080
                        StartLevelImpl.run() line: 258
                        Thread.run() line: 803
                Thread [SCR Component Actor] (Suspended (breakpoint at line 97 
in ServiceRegistrationImpl))
                        ServiceRegistrationImpl.unregister() line: 97
                        
ImmediateComponentManager(AbstractComponentManager).unregisterComponentService()
 line: 503 
                        
ImmediateComponentManager(AbstractComponentManager).deactivateInternal() line: 
369
                        
AbstractComponentManager.access$200(AbstractComponentManager) line: 55
                        AbstractComponentManager$3.run() line: 176 
                        ComponentActorThread.run() line: 81
 
 
The exception thrown is the IllegalStateException from
    public void unregister()
    {
        if (m_svcObj != null)
        {
            m_registry.unregisterService(m_bundle, this);
            m_svcObj = null;
            m_factory = null;
        } 
        else
        {
            throw new IllegalStateException("Service already unregistered.");
        }
    }


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