summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host/linux
diff options
context:
space:
mode:
authorMichael Sartain <mikesart@valvesoftware.com>2013-07-31 23:19:14 +0000
committerMichael Sartain <mikesart@valvesoftware.com>2013-07-31 23:19:14 +0000
commit98d599c2c0b359e51f0f7a13270a3c46ac3adcf3 (patch)
tree630eee15c8f4f0a24fdabad9940a277994c0968f /lldb/source/Host/linux
parent88b7aad3e191d0b97a3090a2bef656547ead8bf5 (diff)
downloadbcm5719-llvm-98d599c2c0b359e51f0f7a13270a3c46ac3adcf3.tar.gz
bcm5719-llvm-98d599c2c0b359e51f0f7a13270a3c46ac3adcf3.zip
Optimize Host::GetThreadName() to read from /proc/$TID per Matt's suggestion.
CR: mkopec llvm-svn: 187542
Diffstat (limited to 'lldb/source/Host/linux')
-rw-r--r--lldb/source/Host/linux/Host.cpp37
1 files changed, 10 insertions, 27 deletions
diff --git a/lldb/source/Host/linux/Host.cpp b/lldb/source/Host/linux/Host.cpp
index cdcff1f3d75..c7120e2b77a 100644
--- a/lldb/source/Host/linux/Host.cpp
+++ b/lldb/source/Host/linux/Host.cpp
@@ -105,13 +105,6 @@ ReadProcPseudoFile (lldb::pid_t pid, const char *name)
return buf_sp;
}
-lldb::DataBufferSP
-ReadProcPseudoFile (lldb::pid_t pid, lldb::tid_t tid, const char *name)
-{
- std::string process_thread_pseudo_file = "task/" + std::to_string(tid) + "/" + name;
- return ReadProcPseudoFile(pid, process_thread_pseudo_file.c_str());
-}
-
} // anonymous namespace
static bool
@@ -458,28 +451,18 @@ Host::ThreadCreated (const char *thread_name)
std::string
Host::GetThreadName (lldb::pid_t pid, lldb::tid_t tid)
{
- const size_t thread_name_max_size = 16;
- char pthread_name[thread_name_max_size];
- std::string thread_name;
- // Read the /proc/$PID/stat file.
- lldb::DataBufferSP buf_sp = ReadProcPseudoFile (pid, tid, "stat");
-
- // The file/thread name of the executable is stored in parenthesis. Search for the first
- // '(' and last ')' and copy everything in between.
- const char *filename_start = ::strchr ((const char *)buf_sp->GetBytes(), '(');
- const char *filename_end = ::strrchr ((const char *)buf_sp->GetBytes(), ')');
-
- if (filename_start && filename_end)
+ // Read /proc/$TID/comm file.
+ lldb::DataBufferSP buf_sp = ReadProcPseudoFile (tid, "comm");
+ if (buf_sp->GetByteSize())
{
- ++filename_start;
- size_t length = filename_end - filename_start;
- if (length > thread_name_max_size)
- length = thread_name_max_size;
- strncpy(pthread_name, filename_start, length);
- thread_name = std::string(pthread_name, length);
- }
+ const char *comm_str = (const char *)buf_sp->GetBytes();
+ const char *cr_str = ::strchr(comm_str, '\n');
+ size_t length = cr_str ? (cr_str - comm_str) : buf_sp->GetByteSize();
- return thread_name;
+ std::string thread_name(comm_str, length);
+ return thread_name;
+ }
+ return std::string("");
}
void
OpenPOWER on IntegriCloud