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