Author: mriou
Date: Thu Dec 21 10:29:13 2006
New Revision: 489430

URL: http://svn.apache.org/viewvc?view=rev&rev=489430
Log:
Protecting against concurrent modifications.

Modified:
    
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java

Modified: 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java?view=diff&rev=489430&r1=489429&r2=489430
==============================================================================
--- 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
 (original)
+++ 
incubator/ode/trunk/bpel-runtime/src/main/java/org/apache/ode/bpel/engine/BpelEngineImpl.java
 Thu Dec 21 10:29:13 2006
@@ -318,17 +318,24 @@
             try {
                 while (true) {
                     Thread.sleep(10000);
-                    for (BpelProcess process : _activeProcesses.values()) {
-                        Long lru;
-                        synchronized(_processesLRU) {
-                            lru = _processesLRU.get(process._pid);
+                    try {
+                        for (BpelProcess process : _activeProcesses.values()) {
+                            Long lru;
+                            synchronized(_processesLRU) {
+                                lru = _processesLRU.get(process._pid);
+                            }
+                            if (lru != null && process._oprocess != null
+                                    && System.currentTimeMillis() - lru > 
_processMaxAge) {
+                                process._oprocess = null;
+                                __log.debug("Process definition reaper 
cleaning " + process._pid);
+                            }
+                            Thread.sleep(10);
                         }
-                        if (lru != null && process._oprocess != null
-                                && System.currentTimeMillis() - lru > 
_processMaxAge) {
-                            process._oprocess = null;
-                            __log.debug("Process definition reaper cleaning " 
+ process._pid);
-                        }
-                        Thread.sleep(10);
+                    } catch (ConcurrentModificationException cme) {
+                        // A concurrent modification could happen once in a 
while, it's not really a
+                        // problem as we'll try again 10s later.
+                        __log.debug("Concurrent modification exception while 
trying to reap process definitions, " +
+                                "will try again in a few seconds.");
                     }
                 }
             } catch (InterruptedException e) {


Reply via email to