mirror of
https://gitlab.com/mangadex-pub/mangadex_at_home.git
synced 2024-11-17 00:22:32 +01:00
Update a pathological case
This commit is contained in:
parent
6efff4ce40
commit
2c4cfefb94
@ -36,6 +36,7 @@ data class Running(val server: Http4kServer, val settings: ServerSettings) : Sta
|
||||
class MangaDexClient(private val clientSettings: ClientSettings) {
|
||||
// this must remain singlethreaded because of how the state mechanism works
|
||||
private val executorService = Executors.newSingleThreadScheduledExecutor()
|
||||
// state must only be accessed from the thread on the executorService
|
||||
private var state: State = Uninitialized
|
||||
|
||||
private val serverHandler: ServerHandler = ServerHandler(clientSettings)
|
||||
@ -260,21 +261,32 @@ class MangaDexClient(private val clientSettings: ClientSettings) {
|
||||
fun shutdown() {
|
||||
LOGGER.info("Mangadex@Home Client stopping")
|
||||
|
||||
val state = this.state
|
||||
if (state is Running) {
|
||||
val latch = CountDownLatch(1)
|
||||
|
||||
this.state = GracefulShutdown(state, nextState = Shutdown) {
|
||||
webUi?.close()
|
||||
try {
|
||||
cache.close()
|
||||
} catch (e: IOException) {
|
||||
LOGGER.error("Cache failed to close", e)
|
||||
val latch = CountDownLatch(1)
|
||||
executorService.schedule({
|
||||
val state = this.state
|
||||
if (state is Running) {
|
||||
this.state = GracefulShutdown(state, nextState = Shutdown) {
|
||||
latch.countDown()
|
||||
}
|
||||
latch.await()
|
||||
} else if (state is GracefulShutdown) {
|
||||
this.state = state.copy(nextState = Shutdown) {
|
||||
latch.countDown()
|
||||
}
|
||||
} else if (state is Uninitialized || state is Shutdown) {
|
||||
this.state = Shutdown
|
||||
latch.countDown()
|
||||
}
|
||||
latch.await()
|
||||
}, 0, TimeUnit.SECONDS)
|
||||
latch.await()
|
||||
|
||||
webUi?.close()
|
||||
try {
|
||||
cache.close()
|
||||
} catch (e: IOException) {
|
||||
LOGGER.error("Cache failed to close", e)
|
||||
}
|
||||
|
||||
executorService.shutdown()
|
||||
LOGGER.info("Mangadex@Home Client stopped")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user