Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / source / Host / posix / HostThreadPosix.cpp
blob4250e07e51cc0abe7be2847ae7b754ee42f64745
1 //===-- HostThreadPosix.cpp -----------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #include "lldb/Host/posix/HostThreadPosix.h"
10 #include "lldb/Utility/Status.h"
12 #include <cerrno>
13 #include <pthread.h>
15 using namespace lldb;
16 using namespace lldb_private;
18 HostThreadPosix::HostThreadPosix() = default;
20 HostThreadPosix::HostThreadPosix(lldb::thread_t thread)
21 : HostNativeThreadBase(thread) {}
23 HostThreadPosix::~HostThreadPosix() = default;
25 Status HostThreadPosix::Join(lldb::thread_result_t *result) {
26 Status error;
27 if (IsJoinable()) {
28 int err = ::pthread_join(m_thread, result);
29 error.SetError(err, lldb::eErrorTypePOSIX);
30 } else {
31 if (result)
32 *result = nullptr;
33 error.SetError(EINVAL, eErrorTypePOSIX);
36 Reset();
37 return error;
40 Status HostThreadPosix::Cancel() {
41 Status error;
42 if (IsJoinable()) {
43 #ifndef __FreeBSD__
44 llvm_unreachable("someone is calling HostThread::Cancel()");
45 #else
46 int err = ::pthread_cancel(m_thread);
47 error.SetError(err, eErrorTypePOSIX);
48 #endif
50 return error;
53 Status HostThreadPosix::Detach() {
54 Status error;
55 if (IsJoinable()) {
56 int err = ::pthread_detach(m_thread);
57 error.SetError(err, eErrorTypePOSIX);
59 Reset();
60 return error;