Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/lldb/source/Host/posix/HostThreadPosix.cpp
39607 views
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
//===----------------------------------------------------------------------===//
8
9
#include "lldb/Host/posix/HostThreadPosix.h"
10
#include "lldb/Utility/Status.h"
11
12
#include <cerrno>
13
#include <pthread.h>
14
15
using namespace lldb;
16
using namespace lldb_private;
17
18
HostThreadPosix::HostThreadPosix() = default;
19
20
HostThreadPosix::HostThreadPosix(lldb::thread_t thread)
21
: HostNativeThreadBase(thread) {}
22
23
HostThreadPosix::~HostThreadPosix() = default;
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
}
62
63