Hi Anton, 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.
Ted > On Nov 26, 2014, at 3:27 PM, Anton Yartsev <[email protected]> wrote: > > Ping! > > Attached are an updated patch for ccc-analyzer and a similar patch for > scan-build, please review. > >>> On 06.11.2014 20:27, Jordan Rose wrote: >>> I think my point was "why bother forking at all if we're using open to run >>> a subprocess?". >> Ah, got it! Attached is an updated patch. >> >>> >>> Also, this will fail if the path contains spaces: >> Corrected. >> >>> >>> + my $ExecLine = join(' ', $Clang, "-###", $mode, @$Args, "2>&1", "|"); >>> + open(PS, $ExecLine); >>> >>> Do newer Perls on newer Windows support the list form of open? >> No, at least ActivePerl, StrawberryPerl and Dwimperl. >> >> Current perl docs state: >> 'open to |- and -| are unsupported. (Win32, RISC OS)' >> (http://perldoc.perl.org/perlport.html#open) >> and >> 'The open(FOO, "|-") and open(BAR, "-|") constructs are not yet >> implemented.' (http://perldoc.perl.org/perlfork.html) >> >>> Jordan >>> >>> >>>> On Nov 5, 2014, at 11:54 , Anton Yartsev <[email protected]> wrote: >>>> >>>> Ping! >>>>> 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 cpan.org, but they are not guarantee to be included at the >>>>> users perl distribution. >>>>>> 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? >>>>>> >>>>>> Jordan >>>>>> >>>>>> >>>>>>> On Oct 21, 2014, at 6:47 , Anton Yartsev <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> Hi all, >>>>>>> >>>>>>> Attached is the patch that prevents ccc/c++-analyzer from hang if >>>>>>> launched with ActivePerl or Strawberry Perl interpreters. >>>>>>> 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. >>>>>>> The conditions for hang are: child should open a pipe to the parent and >>>>>>> parent should read from the child, otherwise no hang. >>>>>>> >>>>>>> The problem is possibly caused by the bug in emulation of 'fork' by >>>>>>> Perl interpreters on Windows. From perlfork documentation, BUGS section: >>>>>>> "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." >>>>>>> >>>>>>> An example from perlfork documentation also hangs: >>>>>>> >>>>>>> # simulate open(FOO, "-|") >>>>>>> sub pipe_from_fork ($) { >>>>>>> my $parent = shift; >>>>>>> pipe $parent, my $child or die; >>>>>>> my $pid = fork(); >>>>>>> die "fork() failed: $!" unless defined $pid; >>>>>>> if ($pid) { >>>>>>> close $child; >>>>>>> } >>>>>>> else { >>>>>>> close $parent; >>>>>>> open(STDOUT, ">&=" . fileno($child)) or die; >>>>>>> } >>>>>>> $pid; >>>>>>> } >>>>>>> >>>>>>> if (pipe_from_fork('BAR')) { >>>>>>> # parent >>>>>>> while (<BAR>) { print; } >>>>>>> close BAR; >>>>>>> } >>>>>>> else { >>>>>>> # child >>>>>>> print "pipe_from_fork\n"; >>>>>>> exit(0); >>>>>>> } >>>>>>> >>>>>>> The hang is not reproduced only with the MSYS Perl. >>>>>>> >>>>>>> OK to commit? >>>>>>> -- >>>>>>> Anton >>>>>>> <ccc-analyzer_fork_open_hang.patch> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Anton >>>> >>>> >>>> -- >>>> Anton >>> >> >> >> -- >> Anton > > > -- > Anton > <ccc-analyzer_fork_open_hang_v2.patch> > <scan-build_fork_open_hang.patch>
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
