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

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

Operating System: Linux
PatchStatus: (no value)
Severity: High
Type:
Perl Version: 5.10.0
Fixed In: 5.13.5



Subject: Memory Leak with Threads
Date: Tue, 6 Oct 2009 15:20:15 +0000
To: perlbug [...] perl.org
From: Jason Baumgartner <jasonmbaumgartner [...] gmail.com>
Download (untitled) / with headers
text/plain 3.1k
This is a bug report for perl from jasonmbaumgartner@gmail.com, generated with the help of perlbug 1.36 running under perl 5.10.0. ----------------------------------------------------------------- [Please enter your report here] 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 {} [Please do not change anything below this line] ----------------------------------------------------------------- --- 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
Download (untitled) / with headers
text/plain 332b
Show quoted text
> The following script leaks memory.
Show quoted text
> 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
Download (untitled) / with headers
text/plain 708b
On Wed Nov 11 01:47:37 2009, jarich wrote: Show quoted text
> 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 }
Download (untitled) / with headers
text/plain 235b
Show quoted text
> > 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;
Download (untitled) / with headers
text/plain 117b
This appears to leak only on none-debugging builds, and appears to have been fixed sometime between 5.13.4 and 5.13.5


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