From e088fb89292bb301e69f4b35ba09defb4063f338 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Fri, 2 Jun 2023 03:27:29 +0300 Subject: [PATCH] Add yield_prim_pthread_cancel_test --- test/Jamfile.v2 | 1 + test/yield_prim_pthread_cancel_test.cpp | 54 +++++++++++++++++++++++++ test/yield_prim_windows_h_test.cpp | 2 +- 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 test/yield_prim_pthread_cancel_test.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 83d9d46..e707a6e 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -390,6 +390,7 @@ run sp_thread_pause_test.cpp ; run sp_thread_yield_test.cpp ; run sp_thread_sleep_test.cpp ; run yield_prim_windows_h_test.cpp ; +run yield_prim_pthread_cancel_test.cpp ; use-project /boost/core/swap : ./swap ; build-project ./swap ; diff --git a/test/yield_prim_pthread_cancel_test.cpp b/test/yield_prim_pthread_cancel_test.cpp new file mode 100644 index 0000000..bcc29a5 --- /dev/null +++ b/test/yield_prim_pthread_cancel_test.cpp @@ -0,0 +1,54 @@ +// Test that yield primitives aren't cancelation points +// +// Copyright 2023 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include + +#if !defined(BOOST_HAS_PTHREADS) + +BOOST_PRAGMA_MESSAGE( "Skipping test because BOOST_HAS_PTHREADS is not defined" ) +int main() {} + +#else + +#include + +pthread_mutex_t s_mx = PTHREAD_MUTEX_INITIALIZER; + +void* threadfunc( void* ) +{ + pthread_mutex_lock( &s_mx ); + pthread_mutex_unlock( &s_mx ); + + boost::core::sp_thread_pause(); + boost::core::sp_thread_yield(); + boost::core::sp_thread_sleep(); + + return 0; +} + +int main() +{ + pthread_mutex_lock( &s_mx ); + + pthread_t th; + pthread_create( &th, 0, threadfunc, 0 ); + + pthread_cancel( th ); + + pthread_mutex_unlock( &s_mx ); + + void* r; + pthread_join( th, &r ); + + BOOST_TEST_EQ( r, (void*)0 ); + + return boost::report_errors(); +} + +#endif diff --git a/test/yield_prim_windows_h_test.cpp b/test/yield_prim_windows_h_test.cpp index 50f841f..161d987 100644 --- a/test/yield_prim_windows_h_test.cpp +++ b/test/yield_prim_windows_h_test.cpp @@ -1,4 +1,4 @@ -// Test for sp_thread_yield +// Test for yield_primitives.hpp compatibility with windows.h // // Copyright 2023 Peter Dimov // Distributed under the Boost Software License, Version 1.0.