[libcxx] r271634 - [libcxx] Fix thread join.pass.cpp segfault after r271475
Asiri Rathnayake via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 3 01:45:27 PDT 2016
Author: asiri
Date: Fri Jun 3 03:45:26 2016
New Revision: 271634
URL: http://llvm.org/viewvc/llvm-project?rev=271634&view=rev
Log:
[libcxx] Fix thread join.pass.cpp segfault after r271475
Some pthread implementations do not like being called pthead_join()
with the pthread_t argument set to 0, and causes a segfault. This
patch fixes this issue by validating the pthread_t argument before
invoking pthread_join().
NFC.
Differential revision: http://reviews.llvm.org/D20929
Change-Id: Ief817c57bd0e1f43cbaa03061e02417d6a180c38
Reviewers: EricWF
Modified:
libcxx/trunk/src/thread.cpp
Modified: libcxx/trunk/src/thread.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/thread.cpp?rev=271634&r1=271633&r2=271634&view=diff
==============================================================================
--- libcxx/trunk/src/thread.cpp (original)
+++ libcxx/trunk/src/thread.cpp Fri Jun 3 03:45:26 2016
@@ -46,14 +46,17 @@ thread::~thread()
void
thread::join()
{
- int ec = __libcpp_thread_join(&__t_);
+ int ec = EINVAL;
+ if (__t_ != 0)
+ {
+ ec = __libcpp_thread_join(&__t_);
+ if (ec == 0)
+ __t_ = 0;
+ }
#ifndef _LIBCPP_NO_EXCEPTIONS
if (ec)
throw system_error(error_code(ec, system_category()), "thread::join failed");
-#else
- (void)ec;
#endif // _LIBCPP_NO_EXCEPTIONS
- __t_ = 0;
}
void
More information about the cfe-commits
mailing list