diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h @@ -74,7 +74,6 @@ using WatchpointIndexMap = std::map; WatchpointIndexMap m_watchpoint_index_map; WatchpointIndexMap m_hw_break_index_map; - llvm::Optional m_thread_name; }; typedef std::shared_ptr NativeThreadFreeBSDSP; diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp @@ -149,41 +149,35 @@ } std::string NativeThreadFreeBSD::GetName() { - if (!m_thread_name) { - Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD)); - - std::vector kp; - int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID | KERN_PROC_INC_THREAD, - static_cast(GetProcess().GetID())}; - - while (1) { - size_t len = kp.size() * sizeof(struct kinfo_proc); - void *ptr = len == 0 ? nullptr : kp.data(); - int error = ::sysctl(mib, 4, ptr, &len, nullptr, 0); - if (ptr == nullptr || (error != 0 && errno == ENOMEM)) { - kp.resize(len / sizeof(struct kinfo_proc)); - continue; - } - if (error != 0) { - len = 0; - LLDB_LOG(log, "tid = {0} in state {1} failed to get thread name: {2}", GetID(), - m_state, strerror(errno)); - } + Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_THREAD)); + + std::vector kp; + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID | KERN_PROC_INC_THREAD, + static_cast(GetProcess().GetID())}; + + while (1) { + size_t len = kp.size() * sizeof(struct kinfo_proc); + void *ptr = len == 0 ? nullptr : kp.data(); + int error = ::sysctl(mib, 4, ptr, &len, nullptr, 0); + if (ptr == nullptr || (error != 0 && errno == ENOMEM)) { kp.resize(len / sizeof(struct kinfo_proc)); - break; + continue; } - - // empty == unknown - m_thread_name = std::string(); - for (auto& procinfo : kp) { - if (procinfo.ki_tid == (lwpid_t)GetID()) { - m_thread_name = procinfo.ki_tdname; - break; - } + if (error != 0) { + len = 0; + LLDB_LOG(log, "tid = {0} in state {1} failed to get thread name: {2}", GetID(), + m_state, strerror(errno)); } + kp.resize(len / sizeof(struct kinfo_proc)); + break; + } + + for (auto& procinfo : kp) { + if (procinfo.ki_tid == static_cast(GetID())) + return procinfo.ki_tdname; } - return m_thread_name.getValue(); + return ""; } lldb::StateType NativeThreadFreeBSD::GetState() { return m_state; } diff --git a/lldb/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py b/lldb/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py --- a/lldb/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py +++ b/lldb/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py @@ -29,7 +29,6 @@ self.assertEqual(expected_name, kv_dict.get("name")) @skipIfWindows # the test is not updated for Windows. - @expectedFailureAll(oslist=["freebsd"]) @llgs_test def test(self): """ Make sure lldb-server can retrieve inferior thread name"""