Skip Menu |
Report information
Id: 85366
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: whylivealife [at] gmail.com
Cc:
AdminCc:

Operating System: All
PatchStatus: (no value)
Severity: low
Type: core
Perl Version:
  • 5.8.9
  • 5.22.2
  • 5.23.3
Fixed In: 5.23.4



Subject: fork and encoding simultaneous usage error
Date: Thu, 3 Mar 2011 18:28:40 +0300
To: perlbug [...] perl.org
From: S B <whylivealife [...] gmail.com>
Download (untitled) / with headers
text/plain 5.1k
This is a bug report for perl from whylivealife@gmail.com,
generated with the help of perlbug 1.39 running under perl v5.8.9.


-----------------------------------------------------------------
Perl crashes if script simultaneously uses encoding pragma and fork.

use strict;
use warnings;
use encoding 'utf-8';
my $pid = fork;
unless($pid)
{
  while(1)
  {
    print 1;
    sleep 1;
  }
}

I think it crashes on macro
PUSHSTACKi(PERLSI_MAGIC);

from method
SV *
PerlIOEncode_getarg(pTHX_ PerlIO * f, CLONE_PARAMS * param, int flags)

at
encoding.xs

However, it doesn't crash if i close STDIN and STDOUT before calling fork.
-----------------------------------------------------------------
---
Flags:
    category=library
    severity=medium
    module=encoding
---
Site configuration information for perl v5.8.9:

Configured by sshd_server at Wed Jan 27 16:09:40 2010.

Summary of my perl5 (revision 5 version 8 subversion 9) configuration:
  Platform:
    osname=MSWin32, osvers=5.2, archname=MSWin32-x64-multi-thread
    uname=''
    config_args='undef'
    hint=recommended, useposix=true, d_sigaction=undef
    usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -Ox -GL -Wp64 -fp:precise -DWIN32 -D_CONSOLE -DNO_STRICT -DHAVE_DES_FCRYPT -DWIN64 -DCONSERVATIVE -DNO_HASH_SEED -DUSE_SITECUSTOMIZE -DPRIVLIB_LAST_IN_INC -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -DPERL_MSVCRT_READFIX',
    optimize='-MD -Zi -DNDEBUG -Ox -GL -Wp64 -fp:precise',
    cppflags='-DWIN32'
    ccversion='14.00.40310.41', gccversion='', gccosandvers=''
    intsize=4, longsize=4, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8
    ivtype='__int64', ivsize=8, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -ltcg  -libpath:"D:\Perl64\lib\CORE"  -machine:AMD64'
    libpth=\lib
    libs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib bufferoverflowU.lib msvcrt.lib
    perllibs=  oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib  comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib  netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib  version.lib odbc32.lib odbccp32.lib bufferoverflowU.lib msvcrt.lib
    libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl58.lib
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
    cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -ltcg  -libpath:"D:\Perl64\lib\CORE"  -machine:AMD64'

Locally applied patches:
    ACTIVEPERL_LOCAL_PATCHES_ENTRY
    f7bbab select() generates 'Invalid parameter' messages on Windows Vista.
    36f064 do/require don't treat '.\foo' or '..\foo' as absolute paths on Windows
    287a96 Fix -p function and Fcntl::S_IFIFO constant under Microsoft VC compiler
    Iin_load_module moved for compatibility with build 806
    Avoid signal flag SA_RESTART for older versions of HP-UX
    Less verbose ExtUtils::Install and Pod::Find
    Rearrange @INC so that 'site' is searched before 'perl'
    Partly reverted #dafda6 to preserve binary compatibility
    5e162c Problem killing a pseudo-forked child on Win32
    3e5d88 ANSIfy the PATH environment variable on Windows
    c71e9b,29e136 win32_async_check() can loop indefinitely
    aeecf6 Fix alarm() for Windows 2003

---
@INC for perl v5.8.9:
    D:/Perl64/site/lib
    D:/Perl64/lib
    .

---
Environment for perl v5.8.9:
    CYGWIN=tty
    HOME (unset)
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\Program Files (x86)\ImageMagick-6.6.6-Q8;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;D:\Perl64\site\bin;D:\Perl64\bin;C:\Program Files (x86)\ATI Stream\bin\x86_64;C:\Program Files (x86)\ATI Stream\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;C:\Program Files (x86)\Toshiba\Bluetooth Toshiba Stack\sys\;C:\Program Files (x86)\Toshiba\Bluetooth Toshiba Stack\sys\x64\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;D:\masm32\bin;D:\Program Files\MATLAB\R2010b\runtime\win64;D:\Program Files\MATLAB\R2010b\bin;D:\Tools;D:\Program Files (x86)\Mono-2.6.7\bin;D:\Program Files\TortoiseSVN\bin;D:\Program Files\Java\jre6\bin;C:\Program Files (x86)\Common Files\Autodesk Shared\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Common Files\Microsoft Shared\Windows Live;D:\Program Files (x86)\CMake 2.8\bin;D:\Program Files (x86)\Nmap;D:\Program Files (x86)\OpenVPN\bin
    PERL_BADLANG (unset)
    SHELL (unset)

just adding cross reference to related RT http://rt.perl.org/rt3/Ticket/Display.html?id=89142
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 371b
I am removing the link to the encoding.pm ticket, since it is not related to encoding.pm per se. The same bug can be triggered this way: binmode STDOUT, ":encoding(utf8)"; use threads; async { for (1..10) { print "1\n"; sleep 1; } } I think this may have been fixed already, but I don’t have a threaded blead handy right now. -- Father Chrysostomos
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 221b
On Fri Jul 15 08:55:56 2016, sprout wrote: Show quoted text
> I think this may have been fixed already, but I don’t have a threaded > blead handy right now.
I do, it is fixed. I'll bisect and report back. -- Respectfully, Dan Collins
To: perl5-porters [...] perl.org
Date: Fri, 15 Jul 2016 13:07:10 -0300
Subject: Re: [perl #85366] Win32 fork and encoding simultaneous usage error
From: "Vincent Pit (VPIT)" <perl [...] profvince.com>
Download (untitled) / with headers
text/plain 317b
Le 15/07/2016 à 13:02, Dan Collins via RT a écrit : Show quoted text
> On Fri Jul 15 08:55:56 2016, sprout wrote:
>> I think this may have been fixed already, but I don’t have a threaded >> blead handy right now.
> > I do, it is fixed. I'll bisect and report back. >
This is a duplicate of #31923, which has been fixed in 5.24.
RT-Send-CC: perl5-porters [...] perl.org
Download (untitled) / with headers
text/plain 1.8k
On Fri Jul 15 09:02:15 2016, dcollinsn@gmail.com wrote: Show quoted text
> On Fri Jul 15 08:55:56 2016, sprout wrote:
> > I think this may have been fixed already, but I don’t have a threaded > > blead handy right now.
> > I do, it is fixed. I'll bisect and report back.
This was fixed by the same commit as 41121. commit 0ee3fa26f660ac426e3e082f77d806c9d1471f93 Author: Vincent Pit <perl@profvince.com> Date: Fri Aug 28 14:17:00 2015 -0300 Properly duplicate PerlIO::encoding objects PerlIO::encoding objects are usually initialized by calling Perl methods, essentially from the pushed() and getarg() callbacks. During cloning, the PerlIO API will by default call these methods to initialize the duplicate struct when the PerlIOBase parent struct is itself duplicated. This does not behave so well because the perl interpreter is not ready to call methods at this point, for the stacks are not set up yet. The proper way to duplicate the PerlIO::encoding object is to call sv_dup() on its members from the dup() PerlIO callback. So the only catch is to make the getarg() and pushed() calls implied by the duplication of the underlying PerlIOBase object aware that they are called during cloning, and make them wait that the control flow returns to the dup() callback. Fortunately, getarg() knows since its param argument is then non-null, and its return value is passed immediately to pushed(), so it is enough to tag this returned value with a custom magic so that pushed() can see it is being called during cloning. This fixes [RT #31923]. :100644 100644 f79df008098f4df1f97f7f104171b89c31049a90 34c2e2436a2a14e776725ca5c40a74c8f0a4bdb7 M MANIFEST :040000 040000 ce197fb6173fb13198e80fa4a743778f88a797d4 16376953f016ecdaf6dbe144a432d6d683e00229 M ext -- Respectfully, Dan Collins
Download (untitled) / with headers
text/plain 313b
Thank you for filing this report. You have helped make Perl better. With the release today of Perl 5.26.0, this and 210 other issues have been resolved. Perl 5.26.0 may be downloaded via: https://metacpan.org/release/XSAWYERX/perl-5.26.0 If you find that the problem persists, feel free to reopen this ticket.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at perl.org