]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/lldb/source/Host/posix/HostThreadPosix.cpp
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / lldb / source / Host / posix / HostThreadPosix.cpp
1 //===-- HostThreadPosix.cpp -------------------------------------*- C++ -*-===//
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 //===----------------------------------------------------------------------===//
8
9 #include "lldb/Host/posix/HostThreadPosix.h"
10 #include "lldb/Utility/Status.h"
11
12 #include <errno.h>
13 #include <pthread.h>
14
15 using namespace lldb;
16 using namespace lldb_private;
17
18 HostThreadPosix::HostThreadPosix() {}
19
20 HostThreadPosix::HostThreadPosix(lldb::thread_t thread)
21     : HostNativeThreadBase(thread) {}
22
23 HostThreadPosix::~HostThreadPosix() {}
24
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);
34   }
35
36   Reset();
37   return error;
38 }
39
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
49   }
50   return error;
51 }
52
53 Status HostThreadPosix::Detach() {
54   Status error;
55   if (IsJoinable()) {
56     int err = ::pthread_detach(m_thread);
57     error.SetError(err, eErrorTypePOSIX);
58   }
59   Reset();
60   return error;
61 }