freerdp/Limit-threadpool-to-16-threads.patch
Marek Kasik a48c772fde Limit threadpool to 16 threads
Resolves: RHEL-86251
2025-09-29 17:47:12 +02:00

61 lines
1.9 KiB
Diff

From c2fc455d8f2dc60de35ed98cb300b7e6a84fe383 Mon Sep 17 00:00:00 2001
From: Armin Novak <armin.novak@thincast.com>
Date: Wed, 3 Sep 2025 14:03:10 +0200
Subject: [PATCH 066/100] [winpr,pool] limit threadpool to 16 threads by
default
Initialize the threadpool to minimum of number of processors and 16 by
default.
---
winpr/libwinpr/pool/CMakeLists.txt | 2 ++
winpr/libwinpr/pool/pool.c | 13 +++++++++----
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/winpr/libwinpr/pool/CMakeLists.txt b/winpr/libwinpr/pool/CMakeLists.txt
index fb2dee58f..cfa9bc891 100644
--- a/winpr/libwinpr/pool/CMakeLists.txt
+++ b/winpr/libwinpr/pool/CMakeLists.txt
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+set(WINPR_THREADPOOL_DEFAULT_MAX_COUNT "16" CACHE STRING "The maximum (default) number of threads in a pool")
+winpr_definition_add(WINPR_THREADPOOL_DEFAULT_MAX_COUNT=${WINPR_THREADPOOL_DEFAULT_MAX_COUNT})
winpr_module_add(
synch.c
work.c
diff --git a/winpr/libwinpr/pool/pool.c b/winpr/libwinpr/pool/pool.c
index 39bbaaac9..96db6b247 100644
--- a/winpr/libwinpr/pool/pool.c
+++ b/winpr/libwinpr/pool/pool.c
@@ -133,7 +133,14 @@ static BOOL InitializeThreadpool(PTP_POOL pool)
info.dwNumberOfProcessors = 1;
if (!SetThreadpoolThreadMinimum(pool, info.dwNumberOfProcessors))
goto fail;
- SetThreadpoolThreadMaximum(pool, info.dwNumberOfProcessors);
+
+#if !defined(WINPR_THREADPOOL_DEFAULT_MAX_COUNT)
+#error "WINPR_THREADPOOL_DEFAULT_MAX_COUNT must be defined"
+#endif
+ DWORD max = info.dwNumberOfProcessors;
+ if (max > WINPR_THREADPOOL_DEFAULT_MAX_COUNT)
+ max = WINPR_THREADPOOL_DEFAULT_MAX_COUNT;
+ SetThreadpoolThreadMaximum(pool, max);
rc = TRUE;
@@ -143,9 +150,7 @@ fail:
PTP_POOL GetDefaultThreadpool(void)
{
- PTP_POOL pool = NULL;
-
- pool = &DEFAULT_POOL;
+ PTP_POOL pool = &DEFAULT_POOL;
if (!InitializeThreadpool(pool))
return NULL;
--
2.51.0