develooper Front page | perl.perl5.porters | Postings from September 2012

[perl #114722] [PATCH] Reap child in case where exception has been thrown

Thread Previous
From:
Philip Boulain
Date:
September 4, 2012 18:59
Subject:
[perl #114722] [PATCH] Reap child in case where exception has been thrown
Message ID:
rt-3.6.HEAD-11172-1346686926-1485.114722-75-0@perl.org
# New Ticket Created by  Philip Boulain 
# Please include the string:  [perl #114722]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org:443/rt3/Ticket/Display.html?id=114722 >


This is a bug report for perl from philip.boulain@smoothwall.net,
generated with the help of perlbug 1.39 running under perl 5.14.2.

-----------------------------------------------------------------
IPC::Open3 does not behave as documented for exec failures in the
child; in particular, if the command to be executed does not
exist.

As documented, open3 should return the child PID, which should
then die with a complaint to its error handle. It would then be
the responsibility of the calling code to reap the child, as per
normal.

In practice, open3 throws an exception, as for other errors (I
believe this was introduced by feature request #72016). This
means that the calling code cannot learn the child pid, since
open3 never returns. Hence only open3 can reap the child, but it
does not appear to do so.

There are therefore two problems:
 - exec failures leave zombies
 - the documentation for exec failures is out of date

Attached:
 * open3bug - quick script to demonstrate/reproduce the problem,
              just for bug context; not for merge
 * 0001-Reap-child-in-case-where-exception-has-been-thrown.patch
            - test case and proposed fix for the issue
              (reap the child and update the documentation)

The test case failed correctly without the fix, and passes with
the fix, but please be aware that I have only been able to test
under Linux.
-----------------------------------------------------------------
---
Flags:
    category=library
    severity=low
    module=IPC::Open3
---
Site configuration information for perl 5.14.2:

Configured by Debian Project at Fri Aug 10 21:43:06 UTC 2012.

Summary of my perl5 (revision 5 version 14 subversion 2) configuration:

  Platform:
    osname=linux, osvers=2.6.42-26-generic,
archname=x86_64-linux-gnu-thread-multi
    uname='linux allspice 2.6.42-26-generic #41-ubuntu smp thu jun 14
17:49:24 utc 2012 x86_64 x86_64 x86_64 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=x86_64-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14
-Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.14.2
-Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1
-Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh
-Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2
-Duseshrplib -Dlibperl=libperl.so.5.14.2 -des'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
    optimize='-O2 -g',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing
-pipe -fstack-protector -I/usr/local/include'
    ccversion='', gccversion='4.6.3', gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/usr/local/lib'
    libpth=/usr/local/lib /lib/x86_64-linux-gnu /lib/../lib
/usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=, so=so, useshrplib=true, libperl=libperl.so.5.14.2
    gnulibc_version='2.15'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib
-fstack-protector'

Locally applied patches:


---
@INC for perl 5.14.2:
    /etc/perl
    /usr/local/lib/perl/5.14.2
    /usr/local/share/perl/5.14.2
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.14
    /usr/share/perl/5.14
    /usr/local/lib/site_perl
    .

---
Environment for perl 5.14.2:
    HOME=/home/philip
    LANG=en_GB.UTF-8
    LANGUAGE=en_GB:en
    LD_LIBRARY_PATH=/home/philip/opt/lib:
    LOGDIR (unset)
    PATH=/home/philip/opt/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

--
Dr. Philip Boulain
Developer
philip.boulain@smoothwall.net

Smoothwall Ltd
Phone: +44 (0) 8701 999500
www.smoothwall.net

Smoothwall Limited is registered in England, Company Number: 4298247
and whose registered address is 1 John Charles Way, Leeds, LS12 6QA
United Kingdom
This email and any attachments transmitted with it are confidential to
the intended recipient(s) and may not be communicated to any other
person or published by any means without the permission of Smoothwall
Limited. Any opinions stated in this message are solely those of the
author.

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About