<div dir="ltr">I think the thread naming is a reasonable way to go.<div><br></div><div><div style="font-size:12.8px">> 1) Linux and MacOSX inferiors can use pthread_setname_np</div><div style="font-size:12.8px">> 2) FreeBSD inferiors can use pthread_set_name_np<br></div></div><div><br></div><div>IIRC Linux and FreeBSD both are limited to a very short thread name, much shorter than OS X and, if I'm not mistaken, Windows as well.  So we need to not go crazy on thread naming conventions.  The code has it, but I think the limit on Linux and FreeBSD was something like 16 characters.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 2, 2015 at 2:48 PM, Jim Ingham via lldb-dev <span dir="ltr"><<a href="mailto:lldb-dev@lists.llvm.org" target="_blank">lldb-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Sep 2, 2015, at 1:06 PM, Greg Clayton via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
><br>
> One idea is add the ability to discover which of any of the current threads are or are not user created. This might help us.<br>
><br>
> On MacOSX, the main thread would always be considered user created, and any other thread, it is quite easy to tell. User created threads could be ones whose bottom stack frame is "thread_start"<br>
><br>
>    ....<br>
>    frame #8: 0x00007fff9b47c41d libsystem_pthread.dylib thread_start + 13<br>
><br>
> Where OS created threads have their last frames in "start_wqthread" or "_dispatch_mgr_thread":<br>
><br>
>    ...<br>
>    frame #2: 0x00007fff9b47c40d libsystem_pthread.dylib start_wqthread + 13<br>
><br>
> or:<br>
><br>
>    ...<br>
>    frame #2: 0x00007fff9c298a6a libdispatch.dylib _dispatch_mgr_thread + 52<br>
><br>
><br>
> So it might be easy to add API to SBThread like:<br>
><br>
> bool<br>
> SBThread::IsUserCreated();<br>
><br>
> Then we could teach the tests to filter out any threads that are not user created?<br>
<br>
</span>I'm not sure on OS X this is a terribly useful distinction.  There are lots of threads that are created to run user code through the dispatch library.  They won't start with "thread_start" but I don't think most users would think of them as "not user threads..."<br>
<br>
Jim<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
><br>
> Greg<br>
><br>
><br>
>> On Sep 2, 2015, at 12:31 PM, Zachary Turner via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
>><br>
>> Historically the pattern for tests that need to test situations involving threads has been to write the tests using pthreads, and then a common pattern on the python side of the test is to assert that the actual number of threads equals the expected number of threads.<br>
>><br>
>> To deal with the pthread portability issue, I ported most of these tests over to std::threads, but there is still another issue with them.<br>
>><br>
>> On Windows we can't assume anything about the number of threads in a program.  For example, a single-threaded hello world program actually has 3 threads, 2 of which are reserved for use by the operating system.  And the fact that there's 2 is just arbitrary, that might not remain the same between compiler versions, operating system versions, etc.  And to make matters worse it might not even remain constant through the life of the program (the assumption just being that we cannot make any assumptions, since we don't control the threads).<br>
>><br>
>> So I need to find a way to write these tests portably.<br>
>><br>
>> Do all platforms have a way to assign a thread a name?  Looking in Host/*/ThisThread.cpp, it seems:<br>
>><br>
>> 1) Linux and MacOSX inferiors can use pthread_setname_np<br>
>> 2) FreeBSD inferiors can use pthread_set_name_np<br>
>> 3) Windows inferiors can raise a magic exception which the debugger is expected to recognize<br>
>><br>
>> Based on this, it seems that one possible way to write these tests portably is to have the test inferiors assign names to the threads, and have the tests index the threads by name instead of by ordinal.<br>
>><br>
>> Does anyone have any thoughts on this or other possible approaches?<br>
>><br>
>> I really would like to avoid having different inferiors or different tests for all of this functionality, as it will be very easy to get out of sync.<br>
>> _______________________________________________<br>
>> lldb-dev mailing list<br>
>> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
><br>
> _______________________________________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
<br>
_______________________________________________<br>
lldb-dev mailing list<br>
<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">-Todd</div></div>
</div>