From: Lanius Trolling Date: Wed, 3 Apr 2024 22:34:40 +0000 (-0400) Subject: Prevent asset compression from exhausting the thread pool X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=bfdd5ab0eb14089208202665b29632d0f10cc924;p=factbooks Prevent asset compression from exhausting the thread pool --- diff --git a/src/jvmMain/kotlin/info/mechyrdia/lore/asset_compression.kt b/src/jvmMain/kotlin/info/mechyrdia/lore/asset_compression.kt index c09ec21..1b2420a 100644 --- a/src/jvmMain/kotlin/info/mechyrdia/lore/asset_compression.kt +++ b/src/jvmMain/kotlin/info/mechyrdia/lore/asset_compression.kt @@ -4,6 +4,8 @@ import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.request.* import io.ktor.server.response.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runInterruptible import java.io.ByteArrayOutputStream import java.io.File import java.io.FilterOutputStream @@ -31,7 +33,8 @@ private fun ApplicationCall.compressedCache(): CompressedCache? { suspend fun ApplicationCall.respondCompressedFile(file: File) { val cache = compressedCache() ?: return respondFile(file) response.header(HttpHeaders.ContentEncoding, cache.encoding) - respondBytes(cache.getCompressed(file)) + val compressedBytes = runInterruptible(Dispatchers.IO) { cache.getCompressed(file) } + respondBytes(compressedBytes) } private class CompressedCache(val encoding: String, private val compressor: (ByteArray) -> ByteArray) {