Author: marrs
Date: Wed Jan 12 16:43:42 2011
New Revision: 1058225

URL: http://svn.apache.org/viewvc?rev=1058225&view=rev
Log:
FELIX-2776 Fixed a concurrent modification exception, and the order in which 
individual commands were executed.

Modified:
    
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
    
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java

Modified: 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java?rev=1058225&r1=1058224&r2=1058225&view=diff
==============================================================================
--- 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
 (original)
+++ 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/DeploymentAdminImpl.java
 Wed Jan 12 16:43:42 2011
@@ -162,12 +162,13 @@ public class DeploymentAdminImpl impleme
             throw new DeploymentException(DeploymentException.CODE_TIMEOUT, 
"Thread interrupted");
         }
 
-        JarInputStream jarInput = null;
         File tempPackage = null;
-        File tempIndex = null;
-        File tempContents = null;
-
+        StreamDeploymentPackage source = null;
+        boolean succeeded = false;
         try {
+            JarInputStream jarInput = null;
+            File tempIndex = null;
+            File tempContents = null;
             try {
                 File tempDir = m_context.getDataFile(TEMP_DIR);
                 tempDir.mkdirs();
@@ -190,16 +191,9 @@ public class DeploymentAdminImpl impleme
                 m_log.log(LogService.LOG_ERROR, "Stream does not contain a 
valid Jar", e);
                 throw new 
DeploymentException(DeploymentException.CODE_NOT_A_JAR, "Stream does not 
contain a valid Jar", e);
             }
-        }
-        finally {
-            m_semaphore.release();
-        }
-
-        StreamDeploymentPackage source = new StreamDeploymentPackage(jarInput, 
m_context);
-        sendStartedEvent(source.getName());
-
-        boolean succeeded = false;
-        try {
+            source = new StreamDeploymentPackage(jarInput, m_context);
+            sendStartedEvent(source.getName());
+            
             AbstractDeploymentPackage target = (AbstractDeploymentPackage) 
getDeploymentPackage(source.getName());
             boolean newPackage = (target == null);
             if (newPackage) {
@@ -256,8 +250,12 @@ public class DeploymentAdminImpl impleme
             return fileDeploymentPackage;
         }
         finally {
-               delete(tempPackage);
-            sendCompleteEvent(source.getName(), succeeded);
+            if (tempPackage != null) {
+                delete(tempPackage);
+            }
+               if (source != null) {
+                   sendCompleteEvent(source.getName(), succeeded);
+               }
             m_semaphore.release();
         }
     }

Modified: 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java?rev=1058225&r1=1058224&r2=1058225&view=diff
==============================================================================
--- 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
 (original)
+++ 
felix/trunk/deploymentadmin/service/src/main/java/org/apache/felix/deploymentadmin/spi/Command.java
 Wed Jan 12 16:43:42 2011
@@ -61,8 +61,8 @@ public abstract class Command {
      * Commits all changes the command may have defined when it was executed 
by calling the <code>execute()</code> method.
      */
     protected void commit() {
-        for (ListIterator i = m_commit.listIterator(m_commit.size()); 
i.hasPrevious();) {
-            Runnable runnable = (Runnable) i.previous();
+        for (ListIterator i = m_commit.listIterator(); i.hasNext();) {
+            Runnable runnable = (Runnable) i.next();
             runnable.run();
         }
         cleanUp();


Reply via email to