From 029e169936c8ed19f6e3be6fae52f14b1de29ab7 Mon Sep 17 00:00:00 2001 From: Jonathan Halliday Date: Mon, 17 Feb 2020 11:43:14 +0000 Subject: [PATCH] ISPN-11349 lock leak in SIFS FileProvider --- .../persistence/sifs/FileProvider.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/persistence/soft-index/src/main/java/org/infinispan/persistence/sifs/FileProvider.java b/persistence/soft-index/src/main/java/org/infinispan/persistence/sifs/FileProvider.java index ba2ae54e63de..314e58d20afd 100644 --- a/persistence/soft-index/src/main/java/org/infinispan/persistence/sifs/FileProvider.java +++ b/persistence/soft-index/src/main/java/org/infinispan/persistence/sifs/FileProvider.java @@ -205,22 +205,25 @@ public CloseableIterator getFileIterator() { public void clear() throws IOException { lock.writeLock().lock(); - log.debug("Dropping all data"); - while (currentOpenFiles.get() > 0) { - if (tryCloseFile()) { - if (currentOpenFiles.decrementAndGet() == 0) { - break; + try { + log.debug("Dropping all data"); + while (currentOpenFiles.get() > 0) { + if (tryCloseFile()) { + if (currentOpenFiles.decrementAndGet() == 0) { + break; + } } } - } - if (!recordQueue.isEmpty()) throw new IllegalStateException(); - if (!openFiles.isEmpty()) throw new IllegalStateException(); - for (File file : dataDir.listFiles()) { - if (!file.delete()) { - throw new IOException("Cannot delete file " + file); + if (!recordQueue.isEmpty()) throw new IllegalStateException(); + if (!openFiles.isEmpty()) throw new IllegalStateException(); + for (File file : dataDir.listFiles()) { + if (!file.delete()) { + throw new IOException("Cannot delete file " + file); + } } + } finally { + lock.writeLock().unlock(); } - lock.writeLock().unlock(); } public void deleteFile(int fileId) {