<div dir="ltr">I have reworked the patch to use std::condition_variable.  This particular sync mechanism was new to me, I hope I used it correctly.  Is it portable across all target platforms/compilers?  I tested on linux and OSX. <br>
<br>The timeout is pretty small (1ms) but seems ample based on the measurements I made.  <br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jul 29, 2014 at 9:58 PM, Matthew Gardiner <span dir="ltr"><<a href="mailto:mg11@csr.com" target="_blank">mg11@csr.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Cool, let us know how you get on!<br>
Matt<br>
<br>
Shawn Best wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
Thanks for the feedback guys.<br>
<br>
Studying the code, I had figured going with a straight int would in practice be most efficient and not run into multi-threaded problems, even if initially appearing a bit risky.  I will rework it to use a std::condition_variable.  That will be more robust and readable.<br>

<br>
Shawn.<br>
<br>
On 7/29/2014 10:53 AM, Zachary Turner wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
Even better would be an std::condition_variable<br>
<br>
<br></div><div><div class="h5">
On Mon, Jul 28, 2014 at 10:30 PM, Matthew Gardiner <<a href="mailto:mg11@csr.com" target="_blank">mg11@csr.com</a> <mailto:<a href="mailto:mg11@csr.com" target="_blank">mg11@csr.com</a>>> wrote:<br>
<br>
    Hi Shawn,<br>
<br>
    I use 64-bit linux and I see this issue a lot. It usually<br>
    manifests itself as the prompt just not being printed (or perhaps<br>
    it just gets overwritten) - regardless - I invoke a command, and<br>
    I don't see an (lldb) prompt when I should. So I'm well pleased<br>
    that you are looking at this!<br>
<br>
    Would it not be more robust to use a semaphore than usleep to<br>
    synchronise the problematic threads?<br>
<br>
    Although I've not looked too deeply into this particular issue,<br>
    whenever I've seen similar races, I found that it's almost<br>
    impossible to pick the right value when using a sleep command. A<br>
    semaphore, though, should always ensure the waiting thread will<br>
    wake precisely.<br>
<br>
    I'd be happy to help to test such a fix.<br>
<br>
    Matt<br>
<br>
<br>
    Shawn Best wrote:<br>
<br>
        Hi,<br>
<br>
        I have attached a patch which addresses 3 related race<br>
        conditions that cause the command line (lldb) prompt to get<br>
        displayed inappropriately and make it appear it is not<br>
        working correctly.  This issue can be seen on linux and<br>
        FreeBSD.  I can also artificailly induce the problem on OSX.<br>
<br>
        The issue happens when the command handler (in the main<br>
        thread) issues a command such as run, step or continue.<br>
         After the command finishes initiating its action, it returns<br>
        up the call stack and goes back into the main command loop<br>
        waiting for user input.  Simultaneously, as the inferior<br>
        process starts up, the MonitorChildProcess thread picks up<br>
        the change and posts to the PrivateEvent thread.<br>
         HandePrivateEvent() then calls PushProcessIOHandler() which<br>
        will disable the command IO handler and give the inferior<br>
        control of the TTY.  To observe this on OSX, put a<br>
<br>
        usleep(100);<br>
<br>
        immediately prior the PushProcessIOHandler() in<br>
        HandlePrivateEvent.<br>
<br>
<br>
        My proposed solution is that after a 'run', 'step', or<br>
        'continue' command, insert a synchronization point and wait<br>
        until HandlePrivateEvent knows the inferior process is<br>
        running and has pushed the IO handler.  One context switch<br>
        (<100us) is usually all the time it takes on my machine.  As<br>
        an additional safety, I have a timeout (currently 1ms) so it<br>
        will never hang the main thread.<br>
<br>
        Any thoughts, or suggestions would be appreciated.<br>
<br>
        Regards,<br>
        Shawn.<br>
<br>
<br>
        To report this email as spam click here<br>
        <<a href="https://www.mailcontrol.com/sr/MZbqvYs5QwJvpeaetUwhCQ==" target="_blank">https://www.mailcontrol.com/<u></u>sr/MZbqvYs5QwJvpeaetUwhCQ==</a>>.<br>
<br>
<br>
<br>
        ______________________________<u></u>_________________<br>
        lldb-commits mailing list<br></div></div>
        <a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a> <mailto:<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.<u></u>edu</a>><div class=""><br>

        <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/lldb-commits</a><br>
<br>
<br>
<br>
<br>
    Member of the CSR plc group of companies. CSR plc registered in<br>
    England and Wales, registered number 4187346, registered office<br>
    Churchill House, Cambridge Business Park, Cowley Road, Cambridge,<br>
    CB4 0WZ, United Kingdom<br>
    More information can be found at <a href="http://www.csr.com" target="_blank">www.csr.com</a><br></div>
    <<a href="http://www.csr.com" target="_blank">http://www.csr.com</a>>. Keep up to date with CSR on our technical<br>
    blog, <a href="http://www.csr.com/blog" target="_blank">www.csr.com/blog</a> <<a href="http://www.csr.com/blog" target="_blank">http://www.csr.com/blog</a>>, CSR people<br>
    blog, <a href="http://www.csr.com/people" target="_blank">www.csr.com/people</a> <<a href="http://www.csr.com/people" target="_blank">http://www.csr.com/people</a>>, YouTube,<br>
    <a href="http://www.youtube.com/user/CSRplc" target="_blank">www.youtube.com/user/CSRplc</a> <<a href="http://www.youtube.com/user/CSRplc" target="_blank">http://www.youtube.com/user/<u></u>CSRplc</a>>,<br>
    Facebook, <a href="http://www.facebook.com/pages/CSR/191038434253534" target="_blank">www.facebook.com/pages/CSR/<u></u>191038434253534</a><br>
    <<a href="http://www.facebook.com/pages/CSR/191038434253534" target="_blank">http://www.facebook.com/<u></u>pages/CSR/191038434253534</a>>, or follow us<br>
    on Twitter at <a href="http://www.twitter.com/CSR_plc" target="_blank">www.twitter.com/CSR_plc</a><br>
    <<a href="http://www.twitter.com/CSR_plc" target="_blank">http://www.twitter.com/CSR_<u></u>plc</a>>.<div class=""><br>
    New for 2014, you can now access the wide range of products<br></div>
    powered by aptX at <a href="http://www.aptx.com" target="_blank">www.aptx.com</a> <<a href="http://www.aptx.com" target="_blank">http://www.aptx.com</a>>.<br>
    ______________________________<u></u>_________________<br>
    lldb-commits mailing list<br>
    <a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a> <mailto:<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.<u></u>edu</a>><br>
    <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/lldb-commits</a><br>
<br>
<br>
</blockquote>
<br>
</blockquote>
<br>
</blockquote></div><br></div>