You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2012/09/18 20:15:04 UTC

svn commit: r1387297 - /directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java

Author: elecharny
Date: Tue Sep 18 18:15:03 2012
New Revision: 1387297

URL: http://svn.apache.org/viewvc?rev=1387297&view=rev
Log:
Protect the lookup from concurrent modifications

Modified:
    directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java

Modified: directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java?rev=1387297&r1=1387296&r2=1387297&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java (original)
+++ directory/apacheds/branches/apacheds-mvbt/core/src/main/java/org/apache/directory/server/core/DefaultOperationManager.java Tue Sep 18 18:15:03 2012
@@ -559,15 +559,15 @@ public class DefaultOperationManager imp
         directoryService.getReferralManager().unlock();
 
         // populate the context with the old entry
-        eagerlyPopulateFields( deleteContext );
-
-        // Call the Delete method
-        Interceptor head = directoryService.getInterceptor( deleteContext.getNextInterceptor() );
-
         try
         {
             lockWrite();
 
+            eagerlyPopulateFields( deleteContext );
+
+            // Call the Delete method
+            Interceptor head = directoryService.getInterceptor( deleteContext.getNextInterceptor() );
+
             head.delete( deleteContext );
         }
         finally
@@ -763,16 +763,16 @@ public class DefaultOperationManager imp
         // Unlock the ReferralManager
         referralManager.unlock();
 
-        // populate the context with the old entry
-        eagerlyPopulateFields( modifyContext );
-
-        // Call the Modify method
-        Interceptor head = directoryService.getInterceptor( modifyContext.getNextInterceptor() );
-
         try
         {
             lockWrite();
 
+            // populate the context with the old entry
+            eagerlyPopulateFields( modifyContext );
+
+            // Call the Modify method
+            Interceptor head = directoryService.getInterceptor( modifyContext.getNextInterceptor() );
+
             head.modify( modifyContext );
         }
         finally
@@ -870,17 +870,17 @@ public class DefaultOperationManager imp
         // Unlock the ReferralManager
         directoryService.getReferralManager().unlock();
 
-        Entry originalEntry = getOriginalEntry( moveContext );
-
-        moveContext.setOriginalEntry( originalEntry );
-
-        // Call the Move method
-        Interceptor head = directoryService.getInterceptor( moveContext.getNextInterceptor() );
-
         try
         {
             lockWrite();
 
+            Entry originalEntry = getOriginalEntry( moveContext );
+
+            moveContext.setOriginalEntry( originalEntry );
+
+            // Call the Move method
+            Interceptor head = directoryService.getInterceptor( moveContext.getNextInterceptor() );
+
             head.move( moveContext );
         }
         finally
@@ -980,16 +980,16 @@ public class DefaultOperationManager imp
         // Unlock the ReferralManager
         directoryService.getReferralManager().unlock();
 
-        moveAndRenameContext.setOriginalEntry( getOriginalEntry( moveAndRenameContext ) );
-        moveAndRenameContext.setModifiedEntry( moveAndRenameContext.getOriginalEntry().clone() );
-
-        // Call the MoveAndRename method
-        Interceptor head = directoryService.getInterceptor( moveAndRenameContext.getNextInterceptor() );
-
         try
         {
             lockWrite();
 
+            moveAndRenameContext.setOriginalEntry( getOriginalEntry( moveAndRenameContext ) );
+            moveAndRenameContext.setModifiedEntry( moveAndRenameContext.getOriginalEntry().clone() );
+
+            // Call the MoveAndRename method
+            Interceptor head = directoryService.getInterceptor( moveAndRenameContext.getNextInterceptor() );
+
             head.moveAndRename( moveAndRenameContext );
         }
         finally
@@ -1079,18 +1079,19 @@ public class DefaultOperationManager imp
 
         // Call the rename method
         // populate the context with the old entry
-        eagerlyPopulateFields( renameContext );
-        Entry originalEntry = getOriginalEntry( renameContext );
-        renameContext.setOriginalEntry( originalEntry );
-        renameContext.setModifiedEntry( originalEntry.clone() );
-
-        // Call the Rename method
-        Interceptor head = directoryService.getInterceptor( renameContext.getNextInterceptor() );
 
         try
         {
             lockWrite();
 
+            eagerlyPopulateFields( renameContext );
+            Entry originalEntry = getOriginalEntry( renameContext );
+            renameContext.setOriginalEntry( originalEntry );
+            renameContext.setModifiedEntry( originalEntry.clone() );
+
+            // Call the Rename method
+            Interceptor head = directoryService.getInterceptor( renameContext.getNextInterceptor() );
+
             head.rename( renameContext );
         }
         finally