[libcxx-commits] [libcxx] f059e58 - Revert "[libc++] Don't try to wait on a thread that hasn't started in std::async (#125433)"

Kadir Cetinkaya via libcxx-commits libcxx-commits at lists.llvm.org
Mon Mar 10 07:14:18 PDT 2025


Author: Kadir Cetinkaya
Date: 2025-03-10T15:13:41+01:00
New Revision: f059e58702161bb22b457476f2e5c9faa2386226

URL: https://github.com/llvm/llvm-project/commit/f059e58702161bb22b457476f2e5c9faa2386226
DIFF: https://github.com/llvm/llvm-project/commit/f059e58702161bb22b457476f2e5c9faa2386226.diff

LOG: Revert "[libc++] Don't try to wait on a thread that hasn't started in std::async (#125433)"

This reverts commit 11766a40972f5cc853e296231e5d90ca3c886cc1.

Added: 
    

Modified: 
    libcxx/include/future

Removed: 
    libcxx/test/std/thread/futures/futures.async/thread_create_failure.pass.cpp


################################################################################
diff  --git a/libcxx/include/future b/libcxx/include/future
index 22b387d3ba094..a08687485bd99 100644
--- a/libcxx/include/future
+++ b/libcxx/include/future
@@ -865,8 +865,7 @@ void __async_assoc_state<_Rp, _Fp>::__execute() {
 
 template <class _Rp, class _Fp>
 void __async_assoc_state<_Rp, _Fp>::__on_zero_shared() _NOEXCEPT {
-  if (base::__state_ & base::__constructed)
-    this->wait();
+  this->wait();
   base::__on_zero_shared();
 }
 
@@ -903,8 +902,7 @@ void __async_assoc_state<void, _Fp>::__execute() {
 
 template <class _Fp>
 void __async_assoc_state<void, _Fp>::__on_zero_shared() _NOEXCEPT {
-  if (base::__state_ & base::__constructed)
-    this->wait();
+  this->wait();
   base::__on_zero_shared();
 }
 

diff  --git a/libcxx/test/std/thread/futures/futures.async/thread_create_failure.pass.cpp b/libcxx/test/std/thread/futures/futures.async/thread_create_failure.pass.cpp
deleted file mode 100644
index d4f7cb771781c..0000000000000
--- a/libcxx/test/std/thread/futures/futures.async/thread_create_failure.pass.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// UNSUPPORTED: no-threads, no-exceptions
-
-// ASan seems to try to create threadsm which obviouly doesn't work in this test.
-// UNSUPPORTED: asan
-// UNSUPPORTED: hwasan
-
-// UNSUPPORTED: c++03
-
-// There is no way to limit the number of threads on windows
-// UNSUPPORTED: windows
-
-// AIX, FreeBSD, and macOS seem to limit the number of processes, not threads via RLIMIT_NPROC
-// XFAIL: target={{.+}}-aix{{.*}}
-// XFAIL: target={{.+}}-apple-{{.*}}
-// XFAIL: freebsd
-
-// This test makes sure that we fail gracefully in care the thread creation fails. This is only reliably possible on
-// systems that allow limiting the number of threads that can be created. See https://llvm.org/PR125428 for more details
-
-#include <cassert>
-#include <future>
-#include <system_error>
-
-#if __has_include(<sys/resource.h>)
-#  include <sys/resource.h>
-#  ifdef RLIMIT_NPROC
-void force_thread_creation_failure() {
-  rlimit lim = {1, 1};
-  assert(setrlimit(RLIMIT_NPROC, &lim) == 0);
-}
-#  else
-#    error "No known way to force only one thread being available"
-#  endif
-#else
-#  error "No known way to force only one thread being available"
-#endif
-
-int main(int, char**) {
-  force_thread_creation_failure();
-
-  try {
-    std::future<int> fut = std::async(std::launch::async, [] { return 1; });
-    assert(false);
-  } catch (const std::system_error&) {
-  }
-
-  try {
-    std::future<void> fut = std::async(std::launch::async, [] { return; });
-    assert(false);
-  } catch (const std::system_error&) {
-  }
-
-  return 0;
-}


        


More information about the libcxx-commits mailing list