From bfdd5ab0eb14089208202665b29632d0f10cc924 Mon Sep 17 00:00:00 2001 From: Lanius Trolling Date: Wed, 3 Apr 2024 18:34:40 -0400 Subject: [PATCH] Prevent asset compression from exhausting the thread pool --- src/jvmMain/kotlin/info/mechyrdia/lore/asset_compression.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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) { -- 2.25.1