SLING-2119 : Add a periodic sanity check to the internal job cache

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/event@1141656 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
index 62dc55a..2234c00 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/DefaultJobManager.java
@@ -254,8 +254,6 @@
         final boolean doSanityCheck = (schedulerRuns % 12 == 0);
         if ( doSanityCheck ) {
             logger.debug("cleanup: running sanity check");
-            final List<JobEvent> removedEvents = new ArrayList<JobEvent>();
-
             final Map<String, JobEvent> currentEvents;
             synchronized (this.allEvents) {
                 currentEvents = new HashMap<String, JobEvent>(this.allEvents);
@@ -268,19 +266,15 @@
                         logger.debug("cleanup: Removing dead job {}", job);
                         this.allEvents.remove(entry.getKey());
                     }
-                    removedEvents.add(job);
-                }
-            }
-
-            for(final JobEvent removedJob : removedEvents) {
-                final String topic = (String)removedJob.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
-                final List<JobEvent> l;
-                synchronized ( this.allEventsByTopic ) {
-                    l = this.allEventsByTopic.get(topic);
-                }
-                if ( l != null ) {
-                    synchronized ( l ) {
-                        l.remove(removedJob);
+                    final String topic = (String)job.event.getProperty(JobUtil.PROPERTY_JOB_TOPIC);
+                    final List<JobEvent> l;
+                    synchronized ( this.allEventsByTopic ) {
+                        l = this.allEventsByTopic.get(topic);
+                    }
+                    if ( l != null ) {
+                        synchronized ( l ) {
+                            l.remove(job);
+                        }
                     }
                 }
             }
diff --git a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
index 32a25ad..7b7ca3f 100644
--- a/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
+++ b/src/main/java/org/apache/sling/event/impl/jobs/jcr/PersistenceHandler.java
@@ -1337,17 +1337,21 @@
      */
     public boolean isAlive(final JCRJobEvent info) {
         final String path = this.getNodePath(info.uniqueId);
-        synchronized ( this.backgroundLock ) {
-            try {
-                if ( this.backgroundSession.itemExists(path) ) {
-                    final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
-                    if ( !this.backgroundSession.itemExists(finishedPath) ) {
-                        return true;
-                    }
+        Session s = null;
+        try {
+            s = this.environment.createAdminSession();
+            if ( s.itemExists(path) ) {
+                final String finishedPath = path + '/' + JCRHelper.NODE_PROPERTY_FINISHED;
+                if ( !s.itemExists(finishedPath) ) {
+                    return true;
                 }
-            } catch (final RepositoryException re) {
-                // there is nothing we can do
-                this.ignoreException(re);
+            }
+        } catch (final RepositoryException re) {
+            // there is nothing we can do
+            this.ignoreException(re);
+        } finally {
+            if ( s != null ) {
+                s.logout();
             }
         }
         return false;