Index: src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java	(revision 1176416)
+++ src/main/java/org/apache/jackrabbit/core/query/lucene/MultiScorer.java	(working copy)
@@ -75,7 +75,6 @@
                 currentDoc = NO_MORE_DOCS;
             }
         }
-
         return currentDoc;
     }
 
@@ -94,6 +93,11 @@
         if (currentDoc == NO_MORE_DOCS) {
             return currentDoc;
         }
+        // optimize in the case of an advance to finish https://issues.apache.org/jira/browse/JCR-3082
+        if (target == NO_MORE_DOCS) {
+            currentDoc = NO_MORE_DOCS;
+            return currentDoc;
+        }
 
         currentScorer = scorerIndex(target);
         if (scorers[currentScorer].advance(target - starts[currentScorer]) != NO_MORE_DOCS) {
Index: src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java
===================================================================
--- src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java	(revision 1176416)
+++ src/main/java/org/apache/jackrabbit/core/query/lucene/DescendantSelfAxisQuery.java	(working copy)
@@ -502,6 +502,13 @@
                 return currentDoc;
             }
 
+            // optimize in the case of an advance to finish https://issues.apache.org/jira/browse/JCR-3082
+            if (target == NO_MORE_DOCS) {
+                subScorer.advance(target);
+                currentDoc = NO_MORE_DOCS;
+                return currentDoc;
+            }
+
             currentDoc = subScorer.nextDoc();
             if (currentDoc == NO_MORE_DOCS) {
                 return NO_MORE_DOCS;
