@@ -31,9 +31,8 @@ MachThread::MachThread(MachProcess *process, bool is_64_bit,
31
31
m_state(eStateUnloaded), m_state_mutex(PTHREAD_MUTEX_RECURSIVE),
32
32
m_suspend_count(0 ), m_stop_exception(),
33
33
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 ) {
37
36
nub_size_t num_reg_sets = 0 ;
38
37
m_reg_sets = m_arch_up->GetRegisterSetInfo (&num_reg_sets);
39
38
m_num_reg_sets = num_reg_sets;
@@ -255,7 +254,7 @@ struct thread_basic_info *MachThread::GetBasicInfo() {
255
254
bool MachThread::GetBasicInfo (thread_t thread,
256
255
struct thread_basic_info *basicInfoPtr) {
257
256
if (MachPortNumberIsValid (thread)) {
258
- unsigned int info_count = THREAD_BASIC_INFO_COUNT;
257
+ mach_msg_type_number_t info_count = THREAD_BASIC_INFO_COUNT;
259
258
kern_return_t err = ::thread_info (thread, THREAD_BASIC_INFO,
260
259
(thread_info_t )basicInfoPtr, &info_count);
261
260
if (err == KERN_SUCCESS)
@@ -265,6 +264,26 @@ bool MachThread::GetBasicInfo(thread_t thread,
265
264
return false ;
266
265
}
267
266
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
+
268
287
bool MachThread::ThreadIDIsValid (uint64_t thread) { return thread != 0 ; }
269
288
270
289
bool MachThread::MachPortNumberIsValid (thread_t thread) {
@@ -579,28 +598,13 @@ uint32_t MachThread::NumSupportedHardwareWatchpoints() const {
579
598
return m_arch_up->NumSupportedHardwareWatchpoints ();
580
599
}
581
600
582
- bool MachThread::GetIdentifierInfo () {
601
+ const char * MachThread::GetName () {
583
602
// Don't try to get the thread info once and cache it for the life of the
584
603
// thread. It changes over time, for instance
585
604
// if the thread name changes, then the thread_handle also changes... So you
586
605
// 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 ;
604
608
return NULL ;
605
609
}
606
610
0 commit comments