diff --git a/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/CharArrayPool.kt b/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/CharArrayPool.kt index 919e93d4ff..a7d68cd9c9 100644 --- a/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/CharArrayPool.kt +++ b/ktor-http/ktor-http-cio/common/src/io/ktor/http/cio/internals/CharArrayPool.kt @@ -6,6 +6,8 @@ package io.ktor.http.cio.internals import io.ktor.utils.io.pool.* +internal expect val DISABLE_CHAR_ARRAY_POOLING: Boolean + internal const val CHAR_ARRAY_POOL_SIZE = 4096 /** @@ -13,6 +15,14 @@ internal const val CHAR_ARRAY_POOL_SIZE = 4096 */ internal const val CHAR_BUFFER_ARRAY_LENGTH: Int = 4096 / 2 -internal val CharArrayPool: ObjectPool = object : DefaultPool(CHAR_ARRAY_POOL_SIZE) { - override fun produceInstance(): CharArray = CharArray(CHAR_BUFFER_ARRAY_LENGTH) +internal val CharArrayPool: ObjectPool = if (DISABLE_CHAR_ARRAY_POOLING) { + object : NoPoolImpl() { + override fun borrow(): CharArray { + return CharArray(CHAR_BUFFER_ARRAY_LENGTH) + } + } +} else { + object : DefaultPool(CHAR_ARRAY_POOL_SIZE) { + override fun produceInstance(): CharArray = CharArray(CHAR_BUFFER_ARRAY_LENGTH) + } } diff --git a/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/internals/CharArrayPoolJs.kt b/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/internals/CharArrayPoolJs.kt new file mode 100644 index 0000000000..9fef104894 --- /dev/null +++ b/ktor-http/ktor-http-cio/js/src/io/ktor/http/cio/internals/CharArrayPoolJs.kt @@ -0,0 +1,7 @@ +/* + * Copyright 2014-2022 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + */ + +package io.ktor.http.cio.internals + +internal actual val DISABLE_CHAR_ARRAY_POOLING: Boolean = false diff --git a/ktor-http/ktor-http-cio/jvm/src/io/ktor/http/cio/internals/CharArrayPoolJvm.kt b/ktor-http/ktor-http-cio/jvm/src/io/ktor/http/cio/internals/CharArrayPoolJvm.kt new file mode 100644 index 0000000000..17a8db0e18 --- /dev/null +++ b/ktor-http/ktor-http-cio/jvm/src/io/ktor/http/cio/internals/CharArrayPoolJvm.kt @@ -0,0 +1,8 @@ +/* + * Copyright 2014-2022 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + */ + +package io.ktor.http.cio.internals + +internal actual val DISABLE_CHAR_ARRAY_POOLING: Boolean = + System.getProperty("ktor.internal.cio.disable.chararray.pooling")?.toBoolean() ?: false diff --git a/ktor-http/ktor-http-cio/posix/src/io/ktor/http/cio/internals/CharArrayPoolPosix.kt b/ktor-http/ktor-http-cio/posix/src/io/ktor/http/cio/internals/CharArrayPoolPosix.kt new file mode 100644 index 0000000000..9fef104894 --- /dev/null +++ b/ktor-http/ktor-http-cio/posix/src/io/ktor/http/cio/internals/CharArrayPoolPosix.kt @@ -0,0 +1,7 @@ +/* + * Copyright 2014-2022 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license. + */ + +package io.ktor.http.cio.internals + +internal actual val DISABLE_CHAR_ARRAY_POOLING: Boolean = false diff --git a/ktor-io/jvm/src/io/ktor/utils/io/pool/DefaultPool.kt b/ktor-io/jvm/src/io/ktor/utils/io/pool/DefaultPool.kt index ef800891c3..2127cc73e2 100644 --- a/ktor-io/jvm/src/io/ktor/utils/io/pool/DefaultPool.kt +++ b/ktor-io/jvm/src/io/ktor/utils/io/pool/DefaultPool.kt @@ -25,7 +25,7 @@ actual constructor(actual final override val capacity: Int) : ObjectPool { // factory protected actual abstract fun produceInstance(): T - // optional cleaning of poped items + // optional cleaning of popped items protected actual open fun clearInstance(instance: T): T = instance // optional validation for recycled items