<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">I see only one fileno call inside lldb-mi and that is specific to Windows code. Probably some fileno call inside lldb proper is causing this issue. In which
 case, there is nothing much lldb-mi can do but to try to avoid this scenario. As I told earlier, ‘select’ based solution increases time to run test many times. So that does not seem reasonable. I am OK with ioctl based solution and will commit it later if
 there are no more comments/suggestion.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal">>Side comment, But regarding conditionally compiling the file, i prefer doing that at the CMake level (only include it in the set of inputs if the platform is correct) instead of wrapping the whole file in ifdefs.<span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Agree. But if problem is handled at the build level then autoconf based system should be updated too. Anyway, this issue can be dealt separately.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Thanks,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D">Abid
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D"><o:p> </o:p></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> lldb-commits-bounces@cs.uiuc.edu [mailto:lldb-commits-bounces@cs.uiuc.edu]
<b>On Behalf Of </b>Zachary Turner<br>
<b>Sent:</b> 02 December 2014 16:34<br>
<b>To:</b> Илья К; lldb-commits@cs.uiuc.edu<br>
<b>Subject:</b> Re: [Lldb-commits] [PATCH] fix lldb-mi hang on OSX<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I kind of feel like calling fgets from one thread and fileno from another thread indicates a design flaw. Is there any way to fix the design problem instead of this particular bug?<o:p></o:p></p>
<div>
<p class="MsoNormal">On Tue, Dec 2, 2014 at 1:24 AM Илья К <<a href="mailto:ki.stfu@gmail.com">ki.stfu@gmail.com</a>> wrote:<o:p></o:p></p>
<div>
<p class="MsoNormal">Hello Abid,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">>RE: <span style="color:black">But I am still wondering why you need extra "return" in case of -exec-run. It seems to work ok on Linux. Where is it blocking in OSX?</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">I had the same bug on OSX but "select" patch helped me (btw, thank Dawn for that).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">As I understood the problem occurs when trying to get filno(stdin), when another thread sleeping in fgets(stdin). The filno() starts sleeping too because stdin's mutex already locked by fgets(). Perhaps it related to OSX's libc implementation
 and therefore it don't reproduced on Linux.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I wrote test, which doesn't works properly without WITH_SELECT_FIX:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><code><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">#include <cstdio><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <thread><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <unistd.h><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#include <sys/select.h><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">//#define WITH_SELECT_FIX<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">void first_func()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    char buf[1024];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#ifdef WITH_SELECT_FIX<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    fd_set inset;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    FD_ZERO(&inset);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    FD_SET(0, &inset);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    select(1, &inset, NULL, NULL, NULL);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">#endif<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    char *line = fgets(buf, sizeof buf, stdin);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    printf("you entered: %s\n", buf);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">void second_func()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    usleep(100);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    printf("fileno: ");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    printf("%d\n", fileno(stdin));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">int main()<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">{<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    std::thread first(first_func);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    std::thread second(second_func);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    printf("start test\n");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    first.join();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    second.join();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    printf("exiting\n");<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">    return 0;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">}<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"></code> <o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">>RE: <span style="color:black">Btw, if the problem is only with gdb-exit then an extra check for it where we check for "quit" will work too.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">As I said above, it doesn't solve a problem, it only fixes a certain case.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<p class="MsoNormal">So I think you should accept the Dawn's "select" patch.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Ilia<o:p></o:p></p>
</div>
</div>
</div>
<p class="MsoNormal">_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@cs.uiuc.edu" target="_blank">lldb-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits</a><o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>