Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Jan 2000 16:06:09 -0800 (PST)
From:      Lars Eggert <larse@ISI.EDU>
To:        perlbug@perl.com
Cc:        current@freebsd.org
Subject:   "perl in malloc(): warning: recursive call" on array write + signals
Message-ID:  <200001250006.QAA13204@sub.isi.edu>

next in thread | raw e-mail | index | archive | help
This is a bug report for perl from larse@ISI.EDU,
generated with the help of perlbug 1.26 running under perl 5.00503.


-----------------------------------------------------------------
[Please enter your report here] 

Running the following test script causes perl to crash. You may need
to run the script several times before seeing the problem. (The script
spawns a child process that does nothing but write to an array. The
parent signals the child periodically.)

#!/usr/local/bin/perl -w

use strict;

use constant CHUNK_SIZE => 128;
use constant ARRAY_SIZE => 1_000_000;

$| = 1;

if(my $pid = fork) {
  # parent signals periodically
  while(1) {
    select undef, undef, undef, 0.1;
    kill(ALRM => $pid) == 1 or die "cannot signal: $!";
    print ".";
  }
} else {
  # is kid up?
  unless(defined $pid) { die "cannot fork: $!"; }
  
  # initialize array (by using last element)
  my @data;
  $data[ARRAY_SIZE] = 1;
  
  # state of the process (number of alarms received)
  my $state = 0;
  $SIG{ALRM} = sub { $state++ };
  
  # run the test
  while(1) {
    # calculate new position for this iteration
    my $pos = int rand ARRAY_SIZE;
    
    # write a chunk to a random position
    @data[$pos..$pos+CHUNK_SIZE] = (1) x CHUNK_SIZE; 
  }
}


Execution of this script results in the following output:

[sub: ~/thesis/bin] short
......................perl in malloc(): warning: recursive call.
Out of memory!
....perl in malloc(): warning: recursive call.
Out of memory!
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl in free(): warning: recursive call.
perl.perl in malloc(): warning: recursive call.
Out of memory!
perl in free(): warning: recursive call.
cannot signal: No such process at short line 14.
Exit 3

Please let me know if I can provide any other information to help
track this bug down.


[Please do not change anything below this line]
-----------------------------------------------------------------

---
Site configuration information for perl 5.00503:

Configured by markm at $Date: 1999/05/05 19:42:40 $.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
  Platform:
    osname=freebsd, osvers=4.0-current, archname=i386-freebsd
    uname='freebsd freefall.freebsd.org 4.0-current freebsd 4.0-current #0: $Date: 1999/05/05 19:42:40 $'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
  Compiler:
    cc='cc', optimize='undef', gccversion=egcs-2.91.66 19990314 (egcs-1.1.2 release)
    cppflags=''
    ccflags =''
    stdchar='char', d_stdstdio=undef, usevfork=true
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags ='-Wl,-E'
    libpth=/usr/lib
    libs=-lm -lc -lcrypt
    libc=/usr/lib/libc.so, so=so, useshrplib=true, libperl=libperl.so.3
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-DPIC -fpic', lddlflags='-shared'

Locally applied patches:
    

---
@INC for perl 5.00503:
    /usr/libdata/perl/5.00503/mach
    /usr/libdata/perl/5.00503
    /usr/local/lib/perl5/site_perl/5.005/i386-freebsd
    /usr/local/lib/perl5/site_perl/5.005
    .

---
Environment for perl 5.00503:
    HOME=/nfs/ruby/larse
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=.:/home/d7unsupp/FreeBSD.ELF/bin:/usr/local/v6/bin:/usr/local/v6/sbin:/usr/inet6/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin:/usr/tmp/scotty/bin:/stand
    PERL_BADLANG (unset)
    SHELL=/bin/ntcsh


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200001250006.QAA13204>