Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memory Leak with Threads #9897

Closed
p5pRT opened this issue Oct 6, 2009 · 7 comments
Closed

Memory Leak with Threads #9897

p5pRT opened this issue Oct 6, 2009 · 7 comments

Comments

@p5pRT
Copy link

p5pRT commented Oct 6, 2009

Migrated from rt.perl.org#69598 (status was 'resolved')

Searchable as RT69598$

@p5pRT
Copy link
Author

p5pRT commented Oct 6, 2009

From @stuck-in-the-matrix

Created by @stuck-in-the-matrix

The following script leaks memory. Bug appears to also affect others
on the site Perlmonks.
Please visit http​://www.perlmonks.org/?node_id=799383 for more
versions that this bug affects.

Sample code to reproduce bug​:

#!/usr/bin/perl

use Thread;
use Time​::HiRes qw(usleep);

while(usleep(100)) {
my $thr1 = new Thread \&doNothing;
$thr1->join;
}

sub doNothing {}

Perl Info

Flags:
    category=core
    severity=high

Site configuration information for perl 5.10.0:

Configured by Debian Project at Fri Jun 26 18:43:11 UTC 2009.

Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.6.24-23-server, archname=i486-linux-gnu-thread-multi
    uname='linux rothera 2.6.24-23-server #1 smp wed apr 1 22:22:14
utc 2009 i686 gnulinux '
    config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN
-Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr
-Dprivlib=/usr/share/perl/5.10 -Darchlib=/usr/lib/perl/5.10
-Dvendorprefix=/usr -Dvendorlib=/usr/sh$
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN
-fno-strict-aliasing -pipe -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 -I/usr/local/include'
    ccversion='', gccversion='4.3.3', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib /usr/lib64
    libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
    perllibs=-ldl -lm -lpthread -lc -lcrypt
    libc=/lib/libc-2.9.so, so=so, useshrplib=true, libperl=libperl.so.5.10.0
    gnulibc_version='2.9'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib'

Locally applied patches:



@INC for perl 5.10.0:
    /etc/perl
    /usr/local/lib/perl/5.10.0
    /usr/local/share/perl/5.10.0
    /usr/lib/perl5
    /usr/share/perl5
    /usr/lib/perl/5.10
    /usr/share/perl/5.10
    /usr/local/lib/site_perl
    .


Environment for perl 5.10.0:
    HOME=/home/jbaumgartner
    LANG=en_US.UTF-8
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    PERL_BADLANG (unset)
    SHELL=/bin/bash

@p5pRT
Copy link
Author

p5pRT commented Nov 11, 2009

sgc294@internode.on.net - Status changed from 'new' to 'open'

@p5pRT
Copy link
Author

p5pRT commented Nov 11, 2009

From jarich@perltraining.com.au

The following script leaks memory.

use Thread;

G'day Jason Baumgartner.

Thanks for spotting this, it's certainly an interesting leak of scope.
While we're working on this, you may want to investigate the threads and
threads​::shared modules which take advantage of the new Perl threads model.

Thanks again,

  Jacinta

@p5pRT
Copy link
Author

p5pRT commented Nov 26, 2009

From zwon@trinitum.org

On Wed Nov 11 01​:47​:37 2009, jarich wrote​:

While we're working on this, you may want to investigate the threads and
threads​::shared modules which take advantage of the new Perl threads
model.

There's no difference which module to use, the following sample leaking
memory. Tested on Ubuntu 9.04 with perl-5.10.0 and on Ubuntu 9.10 with
5.10.0, 5.10.1, and 5.11.2.

use strict;
use warnings;
use threads;
use Time​::HiRes qw(usleep);

my $count = 0;
while( 1 ) {
  usleep(100);
  my $thr1 = threads->create( \&doNothing );
  $thr1->join;
  unless( ++$count % 1000 ) {
  # prints RSS
  printf "%3d​: %s\n", $count,
  ( split /\s+/, qx[ps vhp $$] )[ 7 ];
  }
}

sub doNothing { 1 }

@p5pRT
Copy link
Author

p5pRT commented Apr 3, 2010

From perl@arisoft.fi

The following script leaks memory.

This simplified sample leaks memory in Linux but not in Windows! Tested
with 5.10.0 and 5.10.1 which was locally compiled from CPAN source.

use threads;
threads->create(sub {})->join while 1;

@p5pRT
Copy link
Author

p5pRT commented Oct 30, 2010

@iabyn - Status changed from 'open' to 'resolved'

@p5pRT p5pRT closed this as completed Oct 30, 2010
@p5pRT
Copy link
Author

p5pRT commented Oct 30, 2010

From @iabyn

This appears to leak only on none-debugging builds,
and appears to have been fixed sometime between 5.13.4 and 5.13.5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant