Please find attached an adjusted patch.  It uses a const static member
variable initialized properly in place of a function call.

Tested:
Linux Ubuntu 14.04 x86_64, clang-3.5-built lldb, all tests pass.
MacOSX 10.9.4, Xcode 6.0 Beta 3-built lldb, all tests pass.


On Sat, Jul 12, 2014 at 3:21 PM, Todd Fiala <[email protected]> wrote:

> Well, we can keep it simple until proven needed to be more complex :-)
>  I'll switch it to a constant and re-send.
>
>
> On Saturday, July 12, 2014, Ed Maste <[email protected]> wrote:
>
>> On 11 July 2014 11:56, Todd Fiala <[email protected]> wrote:
>> > My take was it depends on host details.  For example, I didn't track
>> down
>> > the Windows way of getting this data, but I wouldn't be surprised if it
>> > turned into a method call to the system (which could be cached, but
>> that's
>> > an impl detail that a method call would allow us to hide).
>> >
>> > I thought it made it more flexible on unknown details for current/future
>> > platforms to have it be a function call.
>>
>> Fair enough, and it's not a big deal - I just assume it will in
>> general be a (possibly empirically determined) constant.
>>
>> I did a little digging and couldn't find a limit for Windows.  I did
>> discover the convoluted method used to set the thread name though:
>> http://msdn.microsoft.com/en-us/library/xcb2z8hs.aspx
>> _______________________________________________
>> lldb-commits mailing list
>> [email protected]
>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
>>
>
>
> --
> Todd Fiala | Software Engineer |  [email protected] |  650-943-3180
>
>


-- 
-Todd
Index: include/lldb/Host/Host.h
===================================================================
--- include/lldb/Host/Host.h    (revision 213170)
+++ include/lldb/Host/Host.h    (working copy)
@@ -32,6 +32,10 @@
 class Host
 {
 public:
+
+    /// A value of std::numeric_limits<uint32_t>::max() is used if there is no 
practical limit.
+    static const uint32_t MAX_THREAD_NAME_LENGTH;
+
     typedef bool (*MonitorChildProcessCallback) (void *callback_baton,
                                                  lldb::pid_t pid,
                                                  bool exited,
Index: source/Host/common/Host.cpp
===================================================================
--- source/Host/common/Host.cpp (revision 213170)
+++ source/Host/common/Host.cpp (working copy)
@@ -49,6 +49,9 @@
 #include <pthread_np.h>
 #endif
 
+// C++ includes
+#include <limits>
+
 #include "lldb/Host/Host.h"
 #include "lldb/Core/ArchSpec.h"
 #include "lldb/Core/ConstString.h"
@@ -87,6 +90,12 @@
 using namespace lldb;
 using namespace lldb_private;
 
+// Define maximum thread name length
+#if defined (__linux__) || defined (__FreeBSD__) || defined 
(__FreeBSD_kernel__) || defined (__NetBSD__)
+uint32_t const Host::MAX_THREAD_NAME_LENGTH = 16;
+#else
+uint32_t const Host::MAX_THREAD_NAME_LENGTH = 
std::numeric_limits<uint32_t>::max ();
+#endif
 
 #if !defined (__APPLE__) && !defined (_WIN32)
 struct MonitorInfo
Index: source/Target/Process.cpp
===================================================================
--- source/Target/Process.cpp   (revision 213170)
+++ source/Target/Process.cpp   (working copy)
@@ -3657,11 +3657,23 @@
     // Create a thread that watches our internal state and controls which
     // events make it to clients (into the DCProcess event queue).
     char thread_name[1024];
-    if (already_running)
-        snprintf(thread_name, sizeof(thread_name), 
"<lldb.process.internal-state-override(pid=%" PRIu64 ")>", GetID());
+
+    if (Host::MAX_THREAD_NAME_LENGTH <= 16)
+    {
+            // On platforms with abbreviated thread name lengths, choose 
thread names that fit within the limit.
+            if (already_running)
+                snprintf(thread_name, sizeof(thread_name), "intern-state-OV");
+            else
+                snprintf(thread_name, sizeof(thread_name), "intern-state");
+    }
     else
-        snprintf(thread_name, sizeof(thread_name), 
"<lldb.process.internal-state(pid=%" PRIu64 ")>", GetID());
-        
+    {
+        if (already_running)
+                snprintf(thread_name, sizeof(thread_name), 
"<lldb.process.internal-state-override(pid=%" PRIu64 ")>", GetID());
+        else
+                snprintf(thread_name, sizeof(thread_name), 
"<lldb.process.internal-state(pid=%" PRIu64 ")>", GetID());
+    }
+
     // Create the private state thread, and start it running.
     m_private_state_thread = Host::ThreadCreate (thread_name, 
Process::PrivateStateThread, this, NULL);
     bool success = IS_VALID_LLDB_HOST_THREAD(m_private_state_thread);
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to