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.