Author: marrs
Date: Mon Jan  4 14:36:08 2010
New Revision: 895641

URL: http://svn.apache.org/viewvc?rev=895641&view=rev
Log:
fixed a shutdown issue where sometimes services were unregistered twice

Modified:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java?rev=895641&r1=895640&r2=895641&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/ServiceImpl.java
 Mon Jan  4 14:36:08 2010
@@ -322,25 +322,30 @@
     }
 
     public synchronized void start() {
-        m_serviceRegistration = 
m_context.registerService(ServiceComponent.class.getName(), this, null);
-       State oldState, newState;
-        synchronized (m_dependencies) {
-               oldState = m_state;
-            newState = new State((List) m_dependencies.clone(), true, 
m_isInstantiated, m_isBound);
-            m_state = newState;
-        }
-        calculateStateChanges(oldState, newState);
+       if (m_serviceRegistration == null) {
+               m_serviceRegistration = 
m_context.registerService(ServiceComponent.class.getName(), this, null);
+               State oldState, newState;
+               synchronized (m_dependencies) {
+                       oldState = m_state;
+                   newState = new State((List) m_dependencies.clone(), true, 
m_isInstantiated, m_isBound);
+                   m_state = newState;
+               }
+               calculateStateChanges(oldState, newState);
+       }
     }
 
     public synchronized void stop() {
-       State oldState, newState;
-        synchronized (m_dependencies) {
-               oldState = m_state;
-            newState = new State((List) m_dependencies.clone(), false, 
m_isInstantiated, m_isBound);
-            m_state = newState;
-        }
-        calculateStateChanges(oldState, newState);
-        m_serviceRegistration.unregister();
+       if (m_serviceRegistration != null) {
+               State oldState, newState;
+               synchronized (m_dependencies) {
+                       oldState = m_state;
+                   newState = new State((List) m_dependencies.clone(), false, 
m_isInstantiated, m_isBound);
+                   m_state = newState;
+               }
+               calculateStateChanges(oldState, newState);
+               m_serviceRegistration.unregister();
+               m_serviceRegistration = null;
+       }
     }
 
     public synchronized Service setInterface(String serviceName, Dictionary 
properties) {


Reply via email to