FELIX-3680 Fix some state change problems and add logging
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1393716 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
index 106431b..6503561 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/manager/AbstractComponentManager.java
@@ -759,6 +759,9 @@
}
newRegistration.unregister();
}
+ else {
+ log( LogService.LOG_DEBUG, "Existing service registration, not registering", null );
+ }
}
finally
{
@@ -789,6 +792,14 @@
log( LogService.LOG_DEBUG, "Unregistering services", null );
sr.unregister();
}
+ else if (sr == null)
+ {
+ log( LogService.LOG_DEBUG, "Service already unregistered", null);
+ }
+ else
+ {
+ log( LogService.LOG_DEBUG, "Service unregistered concurrently by another thread", null);
+ }
}
boolean initDependencyManagers()
@@ -1274,8 +1285,8 @@
*/
void changeState( State newState )
{
- log( LogService.LOG_DEBUG, "State transition : {0} -> {1}", new Object[]
- { m_state, newState }, null );
+ log( LogService.LOG_DEBUG, "State transition : {0} -> {1} : service reg: {2}", new Object[]
+ { m_state, newState, m_serviceRegistration.get() }, null );
m_state = newState;
}
@@ -1386,8 +1397,8 @@
private void log( AbstractComponentManager acm, String event )
{
- acm.log( LogService.LOG_DEBUG, "Current state: {0}, Event: {1}", new Object[]
- { m_name, event }, null );
+ acm.log( LogService.LOG_DEBUG, "Current state: {0}, Event: {1}, Service registration: {2}", new Object[]
+ { m_name, event, acm.m_serviceRegistration.get() }, null );
}
void doDeactivate( AbstractComponentManager acm, int reason )
@@ -1620,6 +1631,16 @@
}
+ void deactivate( AbstractComponentManager acm, int reason )
+ {
+ acm.log( LogService.LOG_DEBUG, "Deactivating component", null );
+
+ // catch any problems from deleting the component to prevent the
+ // component to remain in the deactivating state !
+ doDeactivate(acm, reason);
+
+ acm.log( LogService.LOG_DEBUG, "Component deactivated", null );
+ }
void disable( AbstractComponentManager acm )
{
@@ -1675,7 +1696,10 @@
// component to remain in the deactivating state !
doDeactivate(acm, reason);
- acm.changeState( Unsatisfied.getInstance() );
+ if ( acm.state() == this )
+ {
+ acm.changeState( Unsatisfied.getInstance() );
+ }
acm.log( LogService.LOG_DEBUG, "Component deactivated", null );
}