diff --git oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
index a0c214f..5441ca3 100644
--- oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
+++ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
@@ -146,8 +146,16 @@ public class IndexNode {
             lock.readLock().unlock();
             return false;
         } else {
-            refreshPolicy.refreshOnReadIfRequired(refreshCallback);
-            return true;
+            boolean success = false;
+            try {
+                refreshPolicy.refreshOnReadIfRequired(refreshCallback);
+                success = true;
+                return true;
+            } finally {
+                if (!success) {
+                    lock.readLock().unlock();
+                }
+            }
         }
     }
 
diff --git oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java
index 2814a04..6d31884 100644
--- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java
+++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java
@@ -39,7 +39,6 @@ import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.TopDocs;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
@@ -108,7 +107,6 @@ public class IndexNodeTest {
         assertNull(IndexNode.open("/foo", rootBuilder.getNodeState(), builder.getNodeState(), readerFactory, nrtFactory));
     }
 
-    @Ignore("OAK-5649")
     @Test
     public void lockAndRefreshPolicy() throws Exception {
         NodeState state = createNRTIndex();
