From: Michał Górny Date: Thu, 5 Nov 2020 17:59:28 +0000 (+0100) Subject: [lldb] [Process/FreeBSDRemote] Remove thread name caching X-Git-Tag: llvmorg-13-init~6942 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=40140e122f8b6512ebe22efc32dacf14f10117f6;p=platform%2Fupstream%2Fllvm.git [lldb] [Process/FreeBSDRemote] Remove thread name caching Remove the thread name caching code. It does not handle the possibility of thread name changing between requests, therefore breaking TestGdbRemoteThreadName. While technically we could cache the results and reset the cache on resuming process, the gain from doing that does not seem worth the effort. Differential Revision: https://reviews.llvm.org/D90863 --- diff --git a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp index 2e62b0a..3c80f11 100644 --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.cpp @@ -149,41 +149,35 @@ void NativeThreadFreeBSD::SetStepping() { } 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/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h index 665e4ea..e4d4941 100644 --- a/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h +++ b/lldb/source/Plugins/Process/FreeBSDRemote/NativeThreadFreeBSD.h @@ -74,7 +74,6 @@ private: 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/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py b/lldb/test/API/tools/lldb-server/thread-name/TestGdbRemoteThreadName.py index c4f08da..9ec40c1 100644 --- 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 @@ class TestGdbRemoteThreadName(gdbremote_testcase.GdbRemoteTestCaseBase): 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"""