<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Hi Anton,</div><div><br></div><div>Jordan, Anna, and I are all away this week on vacation (and not actively on email). Thanks for the ping and we will circle back with you early next week.</div><div><br></div><div>Ted</div><div><br></div><div>On Nov 26, 2014, at 3:27 PM, Anton Yartsev <<a href="mailto:anton.yartsev@gmail.com">anton.yartsev@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div>
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
<div class="moz-cite-prefix">Ping!<br>
<br>
Attached are an updated patch for ccc-analyzer and a similar patch
for scan-build, please review.<br>
<br>
</div>
<blockquote cite="mid:54622FB6.30802@Gmail.com" type="cite">
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type">
<div class="moz-cite-prefix">On 06.11.2014 20:27, Jordan Rose
wrote:<br>
</div>
<blockquote cite="mid:B62F3D71-2012-4327-9115-4153F880A7AE@apple.com" type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<div class="">I think my point was "why bother forking at all if
we're using open to run a subprocess?".</div>
</blockquote>
Ah, got it! Attached is an updated patch.<br>
<br>
<blockquote cite="mid:B62F3D71-2012-4327-9115-4153F880A7AE@apple.com" type="cite">
<div class=""><br class="">
</div>
<div class="">Also, this will fail if the path contains spaces:</div>
</blockquote>
Corrected.<br>
<br>
<blockquote cite="mid:B62F3D71-2012-4327-9115-4153F880A7AE@apple.com" type="cite">
<div class=""><br class="">
</div>
<div class="">
<div class="">+ my $ExecLine = join(' ', $Clang, "-###",
$mode, @$Args, "2>&1", "|");</div>
<div class="">+ open(PS, $ExecLine);</div>
</div>
<div class=""><br class="">
</div>
<div class="">Do newer Perls on newer Windows support the list
form of open?</div>
</blockquote>
No, at least ActivePerl, StrawberryPerl and Dwimperl.<br>
<br>
Current perl docs state:<br>
'open to <code class="inline">|-</code> and <code class="inline">-|</code>
are unsupported. (Win32, RISC OS)' (<a moz-do-not-send="true" href="http://perldoc.perl.org/perlport.html#open">http://perldoc.perl.org/perlport.html#open</a>)<br>
and<br>
'The open(FOO, "|-") and open(BAR, "-|") constructs are not yet
implemented.' (<a moz-do-not-send="true" href="http://perldoc.perl.org/perlfork.html">http://perldoc.perl.org/perlfork.html</a>)<br>
<br>
<blockquote cite="mid:B62F3D71-2012-4327-9115-4153F880A7AE@apple.com" type="cite">
<div class="">Jordan</div>
<div class=""><br class="">
</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">On Nov 5, 2014, at 11:54 , Anton Yartsev <<a moz-do-not-send="true" href="mailto:anton.yartsev@gmail.com" class="">anton.yartsev@gmail.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type" class="">
<div bgcolor="#FFFFFF" text="#000000" class="">
<div class="moz-cite-prefix">Ping!<br class="">
</div>
<blockquote cite="mid:5452879E.5080509@Gmail.com" type="cite" class="">
<meta content="text/html; charset=windows-1252" http-equiv="Content-Type" class="">
<div class="moz-cite-prefix">It seems that fork is the
only native perl mean for creating subprocesses.
There is a number of packages that provide means for
spawning at <a moz-do-not-send="true" href="http://cpan.org" class="">cpan.org</a>, but
they are not guarantee to be included at the users
perl distribution.</div>
<blockquote cite="mid:658A0B49-9795-4D6E-AA12-363D7CD99B02@apple.com" type="cite" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252" class="">
<div class="">Looking at this code, it's weird that
we're doing this as a fork/exec (or not-exec) at
all. Why can't we just spawn a sub-process?</div>
<div class=""><br class="">
</div>
<div class="">Jordan</div>
<div class=""><br class="">
</div>
<br class="">
<div class="">
<div class="">On Oct 21, 2014, at 6:47 , Anton
Yartsev <<a moz-do-not-send="true" href="mailto:anton.yartsev@gmail.com" class="">anton.yartsev@gmail.com</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite" class="">
<meta http-equiv="content-type" content="text/html; charset=windows-1252" class="">
<div bgcolor="#FFFFFF" text="#000000" class="">
Hi all,<br class="">
<br class="">
Attached is the patch that prevents
ccc/c++-analyzer from hang if launched with
ActivePerl or Strawberry Perl interpreters.<br class="">
The patch replaces the code that creates a
pipe from child to parent to the more portable
explicit writing to parent, this prevent
interpreters from hang.<br class="">
The conditions for hang are: child should open
a pipe to the parent and parent should read
from the child, otherwise no hang.<br class="">
<br class="">
The problem is possibly caused by the bug in
emulation of 'fork' by Perl interpreters on
Windows. From <a moz-do-not-send="true" href="http://perldoc.perl.org/perlfork.html" class="">perlfork</a> documentation, BUGS
section:<br class="">
"In certain cases, the OS-level handles
created by the pipe(), socket(), and accept()
operators are apparently not duplicated
accurately in pseudo-processes. This only
happens in some situations, but where it does
happen, it may result in deadlocks between the
read and write ends of pipe handles, or
inability to send or receive data across
socket handles."<br class="">
<br class="">
An example from perlfork documentation also
hangs:<br class="">
<br class="">
# simulate open(FOO, "-|")<br class="">
sub pipe_from_fork ($) {<br class="">
my $parent = shift;<br class="">
pipe $parent, my $child or die;<br class="">
my $pid = fork();<br class="">
die "fork() failed: $!" unless defined
$pid;<br class="">
if ($pid) {<br class="">
close $child;<br class="">
}<br class="">
else {<br class="">
close $parent;<br class="">
open(STDOUT, ">&=" .
fileno($child)) or die;<br class="">
}<br class="">
$pid;<br class="">
}<br class="">
<br class="">
if (pipe_from_fork('BAR')) {<br class="">
# parent<br class="">
while (<BAR>) { print; }<br class="">
close BAR;<br class="">
}<br class="">
else {<br class="">
# child<br class="">
print "pipe_from_fork\n";<br class="">
exit(0);<br class="">
}<br class="">
<br class="">
The hang is not reproduced only with the MSYS
Perl.<br class="">
<br class="">
OK to commit?<br class="">
<pre class="moz-signature" cols="72">--
Anton</pre>
</div>
<span class=""><ccc-analyzer_fork_open_hang.patch></span></blockquote>
</div>
<br class="">
</blockquote>
<br class="">
<br class="">
<pre class="moz-signature" cols="72">--
Anton</pre>
</blockquote>
<br class="">
<br class="">
<pre class="moz-signature" cols="72">--
Anton</pre>
</div>
</div>
</blockquote>
</div>
<br class="">
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Anton</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Anton</pre>
</div></blockquote><blockquote type="cite"><div><ccc-analyzer_fork_open_hang_v2.patch></div></blockquote><blockquote type="cite"><div><scan-build_fork_open_hang.patch></div></blockquote></body></html>