Merge branch 'master' into westmann/locks
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ConcurrentLockManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ConcurrentLockManager.java
index 6b28063..51307e6 100644
--- a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ConcurrentLockManager.java
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ConcurrentLockManager.java
@@ -460,19 +460,22 @@
             LOGGER.log(LVL, "resArenaMgr " + resArenaMgr.addTo(new RecordManagerStats()).toString());
             LOGGER.log(LVL, "reqArenaMgr " + reqArenaMgr.addTo(new RecordManagerStats()).toString());
         }
+        long holder;
         synchronized (jobArenaMgr) {
-            long holder = jobArenaMgr.getLastHolder(jobSlot);
-            while (holder != -1) {
-                long resource = reqArenaMgr.getResourceId(holder);
-                int dsId = resArenaMgr.getDatasetId(resource);
-                int pkHashVal = resArenaMgr.getPkHashVal(resource);
-                unlock(dsId, pkHashVal, LockMode.ANY, jobSlot);
+            holder = jobArenaMgr.getLastHolder(jobSlot);
+        }
+        while (holder != -1) {
+            long resource = reqArenaMgr.getResourceId(holder);
+            int dsId = resArenaMgr.getDatasetId(resource);
+            int pkHashVal = resArenaMgr.getPkHashVal(resource);
+            unlock(dsId, pkHashVal, LockMode.ANY, jobSlot);
+            synchronized (jobArenaMgr) {
                 holder = jobArenaMgr.getLastHolder(jobSlot);
             }
-            if (DEBUG_MODE) LOGGER.finer("del job slot " + TypeUtil.Global.toString(jobSlot));
-            jobArenaMgr.deallocate(jobSlot);
-            jobIdSlotMap.remove(jobId);
         }
+        if (DEBUG_MODE) LOGGER.finer("del job slot " + TypeUtil.Global.toString(jobSlot));
+        jobArenaMgr.deallocate(jobSlot);
+        jobIdSlotMap.remove(jobId);
         stats.logCounters(LOGGER, Level.INFO, true);
         //LOGGER.info(toString());
     }