re PR libstdc++/61841 (broken std::thread on Hurd)
PR libstdc++/61841 * include/std/thread (thread::_M_start_thread): Declare new overload. (thread::thread<_Callable, _Args...>): Call new overload with an explicit reference to pthread_create. * src/c++11/thread.cc (thread::_M_start_thread): Add new overload. * config/abi/pre/gnu.ver: Export new function. From-SVN: r213922
This commit is contained in:
parent
d2f2e467c0
commit
c6b3f349f5
4 changed files with 29 additions and 0 deletions
|
@ -1,3 +1,12 @@
|
|||
2014-08-13 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
PR libstdc++/61841
|
||||
* include/std/thread (thread::_M_start_thread): Declare new overload.
|
||||
(thread::thread<_Callable, _Args...>): Call new overload with an
|
||||
explicit reference to pthread_create.
|
||||
* src/c++11/thread.cc (thread::_M_start_thread): Add new overload.
|
||||
* config/abi/pre/gnu.ver: Export new function.
|
||||
|
||||
2014-08-13 Sylvestre Ledru <sylvestre@debian.org>
|
||||
|
||||
* include/profile/impl/profiler_hash_func.h: Fix a comment typo
|
||||
|
|
|
@ -1372,6 +1372,9 @@ GLIBCXX_3.4.21 {
|
|||
# std::regex_error::regex_error(std::regex_constants::error_type)
|
||||
_ZNSt11regex_errorC2ENSt15regex_constants10error_typeE;
|
||||
|
||||
# void std::thread::_M_start_thread(__shared_base_type, void(*)())
|
||||
_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEEPFvvE;
|
||||
|
||||
} GLIBCXX_3.4.20;
|
||||
|
||||
|
||||
|
|
|
@ -132,9 +132,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
explicit
|
||||
thread(_Callable&& __f, _Args&&... __args)
|
||||
{
|
||||
#ifdef GTHR_ACTIVE_PROXY
|
||||
// Create a reference to pthread_create, not just the gthr weak symbol
|
||||
_M_start_thread(_M_make_routine(std::__bind_simple(
|
||||
std::forward<_Callable>(__f),
|
||||
std::forward<_Args>(__args)...)),
|
||||
reinterpret_cast<void(*)()>(&pthread_create));
|
||||
#else
|
||||
_M_start_thread(_M_make_routine(std::__bind_simple(
|
||||
std::forward<_Callable>(__f),
|
||||
std::forward<_Args>(__args)...)));
|
||||
#endif
|
||||
}
|
||||
|
||||
~thread()
|
||||
|
@ -182,6 +190,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
hardware_concurrency() noexcept;
|
||||
|
||||
private:
|
||||
void
|
||||
_M_start_thread(__shared_base_type, void (*)());
|
||||
|
||||
void
|
||||
_M_start_thread(__shared_base_type);
|
||||
|
||||
|
|
|
@ -137,6 +137,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
__throw_system_error(int(errc::operation_not_permitted));
|
||||
#endif
|
||||
|
||||
_M_start_thread(__b, nullptr);
|
||||
}
|
||||
|
||||
void
|
||||
thread::_M_start_thread(__shared_base_type __b, void (*)())
|
||||
{
|
||||
__b->_M_this_ptr = __b;
|
||||
int __e = __gthread_create(&_M_id._M_thread,
|
||||
&execute_native_thread_routine, __b.get());
|
||||
|
|
Loading…
Add table
Reference in a new issue