You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2011/01/26 12:02:44 UTC

svn commit: r1063674 - /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java

Author: cziegeler
Date: Wed Jan 26 11:02:44 2011
New Revision: 1063674

URL: http://svn.apache.org/viewvc?rev=1063674&view=rev
Log:
SLING-1955 : Event Support Unit Tests stall in full trunk build

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java?rev=1063674&r1=1063673&r2=1063674&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/queues/AbstractJobQueue.java Wed Jan 26 11:02:44 2011
@@ -25,7 +25,6 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.sling.event.EventPropertiesMap;
 import org.apache.sling.event.EventUtil;
@@ -85,7 +84,7 @@ public abstract class AbstractJobQueue
     private final Map<String, JobEvent> processsingJobsLists = new HashMap<String, JobEvent>();
 
     /** Suspended since. */
-    private final AtomicLong suspendedSince = new AtomicLong(-1);
+    private volatile long suspendedSince = -1L;
 
     /** Suspend lock. */
     private final Object suspendLock = new Object();
@@ -110,7 +109,9 @@ public abstract class AbstractJobQueue
      * @see org.apache.sling.event.jobs.Queue#getStateInfo()
      */
     public String getStateInfo() {
-        return "isWaiting=" + this.isWaiting + ", markedForRemoval=" + this.markedForRemoval + ", suspendedSince=" + this.suspendedSince.longValue();
+        synchronized ( this.suspendLock ) {
+            return "isWaiting=" + this.isWaiting + ", markedForRemoval=" + this.markedForRemoval + ", suspendedSince=" + this.suspendedSince;
+        }
     }
 
     /**
@@ -410,15 +411,15 @@ public abstract class AbstractJobQueue
     private void runJobQueue() {
         JobEvent info = null;
         while ( this.running ) {
-            while ( this.suspendedSince.longValue() != -1 ) {
-                synchronized ( this.suspendLock ) {
+            synchronized ( this.suspendLock ) {
+                while ( this.suspendedSince != -1 ) {
                     try {
                         this.suspendLock.wait(MAX_SUSPEND_TIME);
                     } catch (final InterruptedException ignore) {
                         this.ignoreException(ignore);
                     }
-                    if ( System.currentTimeMillis() > this.suspendedSince.longValue() + MAX_SUSPEND_TIME ) {
-                        this.suspendedSince.set(-1);
+                    if ( System.currentTimeMillis() > this.suspendedSince + MAX_SUSPEND_TIME ) {
+                        this.resume();
                     }
                 }
             }
@@ -538,26 +539,32 @@ public abstract class AbstractJobQueue
      * @see org.apache.sling.event.jobs.Queue#resume()
      */
     public void resume() {
-        if ( this.isSuspended() ) {
-            synchronized ( this.suspendLock ) {
+        synchronized ( this.suspendLock ) {
+            if ( this.suspendedSince != -1 ) {
+                this.suspendedSince = -1;
                 this.suspendLock.notify();
             }
         }
-        this.suspendedSince.set(-1);
     }
 
     /**
      * @see org.apache.sling.event.jobs.Queue#suspend()
      */
     public void suspend() {
-        this.suspendedSince.compareAndSet(-1, System.currentTimeMillis());
+        synchronized ( this.suspendLock ) {
+            if ( this.suspendedSince == -1 ) {
+                this.suspendedSince = System.currentTimeMillis();
+            }
+        }
     }
 
     /**
      * @see org.apache.sling.event.jobs.Queue#isSuspended()
      */
     public boolean isSuspended() {
-        return this.suspendedSince.longValue() != -1;
+        synchronized ( this.suspendLock ) {
+            return this.suspendedSince != -1;
+        }
     }