You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2013/01/07 16:44:59 UTC

svn commit: r1429853 - in /felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo: ComponentFactory.java IPojoFactory.java

Author: clement
Date: Mon Jan  7 15:44:59 2013
New Revision: 1429853

URL: http://svn.apache.org/viewvc?rev=1429853&view=rev
Log:
First attempt to fix FELIX-3839
Reduce the synchronization level in the instance starting process.

Modified:
    felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
    felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java

Modified: felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java?rev=1429853&r1=1429852&r2=1429853&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java (original)
+++ felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/ComponentFactory.java Mon Jan  7 15:44:59 2013
@@ -249,7 +249,7 @@ public class ComponentFactory extends IP
 
     /**
      * Starts the factory.
-     * This method is called when holding the monitor lock.
+     * This method is not called when holding the monitor lock.
      */
     public void starting() {
         if (m_tracker != null) {

Modified: felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java?rev=1429853&r1=1429852&r2=1429853&view=diff
==============================================================================
--- felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java (original)
+++ felix/trunk/ipojo/runtime/core/src/main/java/org/apache/felix/ipojo/IPojoFactory.java Mon Jan  7 15:44:59 2013
@@ -580,7 +580,7 @@ public abstract class IPojoFactory imple
     /**
      * Starting method.
      * This method is called when the factory is starting.
-     * This method is called when holding the lock on the factory.
+     * This method is <strong>not</strong> called when holding the lock on the factory.
      */
     public abstract void starting();
 
@@ -590,16 +590,20 @@ public abstract class IPojoFactory imple
      * calls the {@link IPojoFactory#starting()} method,
      * and published services if the factory is public.
      */
-    public synchronized void start() {
-        if (m_described) { // Already started.
-            return;
+    public void start() {
+        synchronized (this) {
+            if (m_described) { // Already started.
+                return;
+            }
         }
 
         m_componentDesc = getComponentTypeDescription();
 
         starting();
 
-        computeFactoryState();
+        synchronized (this) {
+            computeFactoryState();
+        }
 
         if (m_isPublic) {
             // Exposition of the factory service