<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Ping!<br>
</div>
<blockquote
cite="mid:FBA7AEEA-CD34-45F2-BCBF-ABB852E4E896@apple.com"
type="cite">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<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
moz-do-not-send="true" href="mailto:anton.yartsev@gmail.com">anton.yartsev@gmail.com</a>>
wrote:<br>
<br>
</div>
<blockquote type="cite">
<div>
<meta content="text/html; charset=utf-8"
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=utf-8"
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=utf-8">
<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=utf-8"
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=utf-8"
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=utf-8" 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=utf-8"
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>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Anton</pre>
</body>
</html>