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

Reply via email to