summaryrefslogtreecommitdiff
path: root/dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch
diff options
context:
space:
mode:
authorroot <root@alpha.trunkmasters.com>2026-06-04 16:24:49 -0500
committerroot <root@alpha.trunkmasters.com>2026-06-04 16:24:49 -0500
commita3ceca1b4c0d9bdb550dc23f06ffbb5a8e033bc7 (patch)
tree0c52bbae1c242fbc296bd650fcd1167685f81492 /dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch
parentbfd9c39e4712ebdb442d4ca0673061faed1e70e1 (diff)
downloadsrcux-a3ceca1b4c0d9bdb550dc23f06ffbb5a8e033bc7.tar.gz
srcux-a3ceca1b4c0d9bdb550dc23f06ffbb5a8e033bc7.tar.xz
srcux-a3ceca1b4c0d9bdb550dc23f06ffbb5a8e033bc7.zip
Adding metadata
Diffstat (limited to 'dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch')
-rw-r--r--dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch135
1 files changed, 0 insertions, 135 deletions
diff --git a/dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch b/dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch
deleted file mode 100644
index 6c0912ec96b7..000000000000
--- a/dev-cpp/tbb/files/tbb-2021.7.0-pthread-eagain.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-https://bugs.gentoo.org/881161
-https://github.com/rui314/mold/issues/410
-https://github.com/oneapi-src/oneTBB/commit/ceacd2207edfb72a8fc235213265afe68ce74ad0
-https://github.com/oneapi-src/oneTBB/commit/137c1a88b690acf3525e0f279720ac489ce66481
-
-From ceacd2207edfb72a8fc235213265afe68ce74ad0 Mon Sep 17 00:00:00 2001
-From: Ilya Isaev <ilya.isaev@intel.com>
-Date: Wed, 26 Oct 2022 13:13:51 +0200
-Subject: [PATCH] Rework test_eh_thread to avoid sporadic failures (#946)
-
-Signed-off-by: Isaev, Ilya <ilya.isaev@intel.com>
---- a/test/tbb/test_eh_thread.cpp
-+++ b/test/tbb/test_eh_thread.cpp
-@@ -54,15 +54,16 @@ void limitThreads(size_t limit)
- CHECK_MESSAGE(0 == ret, "setrlimit has returned an error");
- }
-
--static bool g_exception_caught = false;
--static std::mutex m;
--static std::condition_variable cv;
--static std::atomic<bool> stop{ false };
-+size_t getThreadLimit() {
-+ rlimit rlim;
-+
-+ int ret = getrlimit(RLIMIT_NPROC, &rlim);
-+ CHECK_MESSAGE(0 == ret, "getrlimit has returned an error");
-+ return rlim.rlim_cur;
-+}
-
- static void* thread_routine(void*)
- {
-- std::unique_lock<std::mutex> lock(m);
-- cv.wait(lock, [] { return stop == true; });
- return nullptr;
- }
-
-@@ -94,32 +95,17 @@ TEST_CASE("Too many threads") {
- }
-
- // Some systems set really big limit (e.g. >45К) for the number of processes/threads
-- limitThreads(1024);
--
-- std::thread /* isolate test */ ([] {
-- std::vector<Thread> threads;
-- stop = false;
-- auto finalize = [&] {
-- stop = true;
-- cv.notify_all();
-- for (auto& t : threads) {
-- t.join();
-- }
-- };
--
-- for (int i = 0;; ++i) {
-+ limitThreads(1);
-+ if (getThreadLimit() == 1) {
-+ for (int attempt = 0; attempt < 5; ++attempt) {
- Thread thread;
-- if (!thread.isValid()) {
-- break;
-- }
-- threads.push_back(thread);
-- if (i == 1024) {
-- WARN_MESSAGE(false, "setrlimit seems having no effect");
-- finalize();
-+ if (thread.isValid()) {
-+ WARN_MESSAGE(false, "We were able to create a thread. setrlimit seems having no effect");
-+ thread.join();
- return;
- }
- }
-- g_exception_caught = false;
-+ bool g_exception_caught = false;
- try {
- // Initialize the library to create worker threads
- tbb::parallel_for(0, 2, [](int) {});
-@@ -132,9 +118,10 @@ TEST_CASE("Too many threads") {
- }
- // Do not CHECK to avoid memory allocation (we can be out of memory)
- if (!g_exception_caught) {
-- FAIL("No exception was caught");
-+ FAIL("No exception was thrown on library initialization");
- }
-- finalize();
-- }).join();
-+ } else {
-+ WARN_MESSAGE(false, "setrlimit seems having no effect");
-+ }
- }
- #endif
-
-From 137c1a88b690acf3525e0f279720ac489ce66481 Mon Sep 17 00:00:00 2001
-From: Rui Ueyama <ruiu@cs.stanford.edu>
-Date: Wed, 26 Oct 2022 04:54:20 -0700
-Subject: [PATCH] Retry if pthread_create fails with EAGAIN (#824)
-
-Signed-off-by: Rui Ueyama <ruiu@cs.stanford.edu>
---- a/src/tbb/rml_thread_monitor.h
-+++ b/src/tbb/rml_thread_monitor.h
-@@ -31,6 +31,7 @@
- #include <pthread.h>
- #include <cstring>
- #include <cstdlib>
-+#include <time.h>
- #else
- #error Unsupported platform
- #endif
-@@ -191,8 +192,25 @@ inline thread_monitor::handle_type thread_monitor::launch( void* (*thread_routin
- check(pthread_attr_init( &s ), "pthread_attr_init has failed");
- if( stack_size>0 )
- check(pthread_attr_setstacksize( &s, stack_size ), "pthread_attr_setstack_size has failed" );
-+
-+ // pthread_create(2) can spuriously fail with EAGAIN. We retry
-+ // max_num_tries times with progressively longer wait times.
- pthread_t handle;
-- check( pthread_create( &handle, &s, thread_routine, arg ), "pthread_create has failed" );
-+ const int max_num_tries = 20;
-+ int error = EAGAIN;
-+
-+ for (int i = 0; i < max_num_tries && error == EAGAIN; i++) {
-+ if (i != 0) {
-+ // Wait i milliseconds
-+ struct timespec ts = {0, i * 1000 * 1000};
-+ nanosleep(&ts, NULL);
-+ }
-+ error = pthread_create(&handle, &s, thread_routine, arg);
-+ }
-+
-+ if (error)
-+ handle_perror(error, "pthread_create has failed");
-+
- check( pthread_attr_destroy( &s ), "pthread_attr_destroy has failed" );
- return handle;
- }
-