Skip to content

Commit ee88c9a

Browse files
authored
Merge pull request #658 from Multiverse/fix/shutdown-executor
Ensure graceful shutdown for file IO executor service
2 parents 643bc7f + 825c087 commit ee88c9a

1 file changed

Lines changed: 17 additions & 3 deletions

File tree

src/main/java/org/mvplugins/multiverse/inventories/profile/AsyncFileIO.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,17 @@
22

33
import com.dumptruckman.minecraft.util.Logging;
44
import org.jvnet.hk2.annotations.Service;
5-
import org.mvplugins.multiverse.external.jakarta.inject.Inject;
5+
import org.mvplugins.multiverse.external.jakarta.annotation.PreDestroy;
66
import org.mvplugins.multiverse.external.vavr.control.Try;
77

88
import java.io.File;
99
import java.util.Map;
1010
import java.util.concurrent.CompletableFuture;
1111
import java.util.concurrent.ConcurrentHashMap;
1212
import java.util.concurrent.CountDownLatch;
13-
import java.util.concurrent.ExecutionException;
1413
import java.util.concurrent.ExecutorService;
1514
import java.util.concurrent.Executors;
1615
import java.util.concurrent.TimeUnit;
17-
import java.util.concurrent.TimeoutException;
1816
import java.util.function.Supplier;
1917

2018
@Service
@@ -105,4 +103,20 @@ private void waitForLock(File file, CountDownLatch toWaitLatch) {
105103
ExecutorService getExecutor() {
106104
return fileIOExecutorService;
107105
}
106+
107+
@PreDestroy
108+
private void completeRemainingTaskAndShutdown() {
109+
fileIOExecutorService.shutdown();
110+
try {
111+
if (!fileIOExecutorService.awaitTermination(60, TimeUnit.SECONDS)) {
112+
fileIOExecutorService.shutdownNow();
113+
if (!fileIOExecutorService.awaitTermination(60, TimeUnit.SECONDS)) {
114+
Logging.severe("File IO executor did not terminate");
115+
}
116+
}
117+
} catch (InterruptedException ie) {
118+
fileIOExecutorService.shutdownNow();
119+
Thread.currentThread().interrupt();
120+
}
121+
}
108122
}

0 commit comments

Comments
 (0)