<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>