Skip to content

Commit b800ff6

Browse files
authored
[lldb][debugserver][NFC] Simplify macOS thread name fetching. (llvm#111684)
Remove unnecessary `proc_pidinfo` calling.
1 parent d36cef0 commit b800ff6

File tree

2 files changed

+30
-26
lines changed

2 files changed

+30
-26
lines changed

lldb/tools/debugserver/source/MacOSX/MachThread.cpp

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
3131
m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
3232
m_suspend_count(0), m_stop_exception(),
3333
m_arch_up(DNBArchProtocol::Create(this)), m_reg_sets(NULL),
34-
m_num_reg_sets(0), m_ident_info(), m_proc_threadinfo(),
35-
m_dispatch_queue_name(), m_is_64_bit(is_64_bit),
36-
m_pthread_qos_class_decode(nullptr) {
34+
m_num_reg_sets(0), m_extended_info(), m_dispatch_queue_name(),
35+
m_is_64_bit(is_64_bit), m_pthread_qos_class_decode(nullptr) {
3736
nub_size_t num_reg_sets = 0;
3837
m_reg_sets = m_arch_up->GetRegisterSetInfo(&num_reg_sets);
3938
m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
255254
bool MachThread::GetBasicInfo(thread_t thread,
256255
struct thread_basic_info *basicInfoPtr) {
257256
if (MachPortNumberIsValid(thread)) {
258-
unsigned int info_count = THREAD_BASIC_INFO_COUNT;
257+
mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
259258
kern_return_t err = ::thread_info(thread, THREAD_BASIC_INFO,
260259
(thread_info_t)basicInfoPtr, &info_count);
261260
if (err == KERN_SUCCESS)
@@ -265,6 +264,26 @@ bool MachThread::GetBasicInfo(thread_t thread,
265264
return false;
266265
}
267266

267+
struct thread_extended_info *MachThread::GetExtendedInfo() {
268+
if (MachThread::GetExtendedInfo(m_mach_port_number, &m_extended_info))
269+
return &m_extended_info;
270+
return NULL;
271+
}
272+
273+
bool MachThread::GetExtendedInfo(thread_t thread,
274+
struct thread_extended_info *extendedInfoPtr) {
275+
if (MachPortNumberIsValid(thread)) {
276+
mach_msg_type_number_t info_count = THREAD_EXTENDED_INFO_COUNT;
277+
kern_return_t err =
278+
::thread_info(thread, THREAD_EXTENDED_INFO,
279+
(thread_info_t)extendedInfoPtr, &info_count);
280+
if (err == KERN_SUCCESS)
281+
return true;
282+
}
283+
::memset(extendedInfoPtr, 0, sizeof(struct thread_extended_info));
284+
return false;
285+
}
286+
268287
bool MachThread::ThreadIDIsValid(uint64_t thread) { return thread != 0; }
269288

270289
bool MachThread::MachPortNumberIsValid(thread_t thread) {
@@ -579,28 +598,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() const {
579598
return m_arch_up->NumSupportedHardwareWatchpoints();
580599
}
581600

582-
bool MachThread::GetIdentifierInfo() {
601+
const char *MachThread::GetName() {
583602
// Don't try to get the thread info once and cache it for the life of the
584603
// thread. It changes over time, for instance
585604
// if the thread name changes, then the thread_handle also changes... So you
586605
// have to refetch it every time.
587-
mach_msg_type_number_t count = THREAD_IDENTIFIER_INFO_COUNT;
588-
kern_return_t kret = ::thread_info(m_mach_port_number, THREAD_IDENTIFIER_INFO,
589-
(thread_info_t)&m_ident_info, &count);
590-
return kret == KERN_SUCCESS;
591-
592-
return false;
593-
}
594-
595-
const char *MachThread::GetName() {
596-
if (GetIdentifierInfo()) {
597-
int len = ::proc_pidinfo(m_process->ProcessID(), PROC_PIDTHREADINFO,
598-
m_ident_info.thread_handle, &m_proc_threadinfo,
599-
sizeof(m_proc_threadinfo));
600-
601-
if (len && m_proc_threadinfo.pth_name[0])
602-
return m_proc_threadinfo.pth_name;
603-
}
606+
if (GetExtendedInfo() && m_extended_info.pth_name[0])
607+
return m_extended_info.pth_name;
604608
return NULL;
605609
}
606610

lldb/tools/debugserver/source/MacOSX/MachThread.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class MachThread {
108108

109109
bool IsUserReady();
110110
struct thread_basic_info *GetBasicInfo();
111+
struct thread_extended_info *GetExtendedInfo();
111112
const char *GetBasicInfoAsString() const;
112113
const char *GetName();
113114

@@ -126,8 +127,8 @@ class MachThread {
126127
protected:
127128
static bool GetBasicInfo(thread_t threadID,
128129
struct thread_basic_info *basic_info);
129-
130-
bool GetIdentifierInfo();
130+
static bool GetExtendedInfo(thread_t threadID,
131+
struct thread_extended_info *extended_info);
131132

132133
// const char *
133134
// GetDispatchQueueName();
@@ -152,8 +153,7 @@ class MachThread {
152153
const DNBRegisterSetInfo
153154
*m_reg_sets; // Register set information for this thread
154155
nub_size_t m_num_reg_sets;
155-
thread_identifier_info_data_t m_ident_info;
156-
struct proc_threadinfo m_proc_threadinfo;
156+
thread_extended_info_data_t m_extended_info;
157157
std::string m_dispatch_queue_name;
158158
bool m_is_64_bit;
159159

0 commit comments

Comments
 (0)