Author: cziegeler
Date: Thu Dec  4 07:48:00 2008
New Revision: 723362

URL: http://svn.apache.org/viewvc?rev=723362&view=rev
Log:
SLING-759 Avoid synching on jcr sessions. Use extra lock objects for this.

Modified:
    
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
    
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/TimedJobHandler.java

Modified: 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java?rev=723362&r1=723361&r2=723362&view=diff
==============================================================================
--- 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
 (original)
+++ 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
 Thu Dec  4 07:48:00 2008
@@ -140,6 +140,12 @@
 
     public static ThreadPool JOB_THREAD_POOL;
 
+    /** Sync lock */
+    private final Object writeLock = new Object();
+
+    /** Sync lock */
+    private final Object backgroundLock = new Object();
+
     /**
      * Activate this component.
      * @param context
@@ -546,7 +552,7 @@
      */
     private boolean executeJob(final EventInfo info, final 
BlockingQueue<EventInfo> jobQueue) {
         boolean putback = false;
-        synchronized (this.backgroundSession) {
+        synchronized (this.backgroundLock) {
             try {
                 this.backgroundSession.refresh(false);
                 // check if the node still exists
@@ -1029,7 +1035,7 @@
                                         || 
job.getProperty(EventUtil.PROPERTY_JOB_PARALLEL) != null;
         EventInfo putback = null;
         // we have to use the same session for unlocking that we used for 
locking!
-        synchronized ( this.backgroundSession ) {
+        synchronized ( this.backgroundLock ) {
             try {
                 this.backgroundSession.refresh(false);
                 // check if the job has been cancelled
@@ -1334,7 +1340,7 @@
      */
     public void cancelJob(String jobId) {
         if ( jobId != null ) {
-            synchronized ( this.writerSession ) {
+            synchronized ( this.writeLock ) {
                 try {
                     this.writerSession.refresh(false);
                 } catch (RepositoryException e) {

Modified: 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/TimedJobHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/TimedJobHandler.java?rev=723362&r1=723361&r2=723362&view=diff
==============================================================================
--- 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/TimedJobHandler.java
 (original)
+++ 
incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/TimedJobHandler.java
 Thu Dec  4 07:48:00 2008
@@ -80,6 +80,9 @@
     /** Unloaded events. */
     protected Set<String>unloadedEvents = new HashSet<String>();
 
+    /** Sync lock */
+    private final Object writeLock = new Object();
+
     /**
      * @see 
org.apache.sling.event.impl.AbstractRepositoryEventHandler#startWriterSession()
      */
@@ -116,7 +119,7 @@
 
                     // write event and update path
                     // if something went wrong we get the node path and 
reschedule
-                    synchronized ( this.writerSession ) {
+                    synchronized ( this.writeLock ) {
                         info.nodePath = this.persistEvent(info.event, 
scheduleInfo);
                     }
                     if ( info.nodePath != null ) {
@@ -146,7 +149,7 @@
                 this.ignoreException(e);
             }
             if ( info != null && this.running ) {
-                synchronized ( this.writerSession ) {
+                synchronized ( this.writeLock ) {
                     ScheduleInfo scheduleInfo = null;
                     try {
                         scheduleInfo = new ScheduleInfo(info.event);
@@ -743,7 +746,7 @@
      * @see 
org.apache.sling.event.TimedEventStatusProvider#cancelTimedEvent(java.lang.String)
      */
     public void cancelTimedEvent(String jobId) {
-        synchronized ( this.writerSession ) {
+        synchronized ( this.writeLock ) {
             try {
                 // is there a node?
                 final Item foundNode = this.writerSession.itemExists(jobId) ? 
this.writerSession.getItem(jobId) : null;


Reply via email to