Fixes runlevel concurrency issue

Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/hk2-runlevel/src/main/java/org/glassfish/hk2/runlevel/internal/CurrentTaskFuture.java b/hk2-runlevel/src/main/java/org/glassfish/hk2/runlevel/internal/CurrentTaskFuture.java
index f7118b8..8006435 100755
--- a/hk2-runlevel/src/main/java/org/glassfish/hk2/runlevel/internal/CurrentTaskFuture.java
+++ b/hk2-runlevel/src/main/java/org/glassfish/hk2/runlevel/internal/CurrentTaskFuture.java
@@ -1410,7 +1410,7 @@
         @Override
         public void run() {
             for (;;) {
-                ActiveDescriptor<?> job = null;
+                ActiveDescriptor<?> job;
                 queueLock.lock();
                 try {
                     if (caput) return;
@@ -1419,15 +1419,14 @@
                         queueCondition.signal();
                         return;
                     }
-                    job = queue.remove(0);
+                    job = queue.get(0);
                 } finally {
                     queueLock.unlock();
                 }
                 
                 try {
                     locator.getServiceHandle(job).destroy();
-                }
-                catch (Throwable th) {
+                } catch (Throwable th) {
                     queueLock.lock();
                     try {
                         parent.lastError = th;
@@ -1436,6 +1435,13 @@
                     } finally {
                         queueLock.unlock();
                     }
+                } finally {
+                    queueLock.lock();
+                    try {
+                        queue.remove(job);
+                    } finally {
+                        queueLock.unlock();
+                    }
                 }
             }