Skip Menu |

This queue is for tickets about the forks CPAN distribution.

Report information
The Basics
Id: 51673
Status: open
Priority: 0/
Queue: forks

People
Owner: RYBSKEJ [...] cpan.org
Requestors: toddr [...] null.net
Cc:
AdminCc:

Bug Information
Severity: Normal
Broken in: 0.33
Fixed in: (no value)



Subject: shared variable locking not eval safe
Hi, I have discovered that the second I use lock inside an eval, my forked process terminates. Test is attached. Note that in the second set of tests, test 2 is never reached.
Subject: fork_eval_lock.t
#!perl use strict; use warnings; use Test::More; use forks; use forks::shared; my $var1 :shared; my $thr = threads->new({'context' => 'list'}, sub { fork_eval(); }); $thr->join(); my $thr2 = threads->new({'context' => 'list'}, sub { fork_eval_lock(); }); $thr2->join(); exit; sub fork_eval { ok(1, "This test reached"); my $error_message = "ERROR_MESSAGE_HERE"; eval { die($error_message); }; like($@, qr/^$error_message/, "Error message received"); done_testing(); } sub fork_eval_lock { ok(1, "This test reached"); my $error_message = "ERROR_MESSAGE_HERE"; eval { lock $var1; $var1 = 'fork'; unlock $var1; die($error_message); }; like($@, qr/^$error_message/, "Error message received but this test never reached."); done_testing(); }
An even simpler example is causing a segfault on perl: #!perl use forks; use forks::shared; my $var1 :shared; eval { lock $var1; die("This message"); }; print "I never get here\n";
An even simpler example is causing a segfault on perl: #!perl use forks; use forks::shared; my $var1 :shared; eval { lock $var1; die("This message"); }; print "I never get here\n";
What version of Perl and what platform are you using? Please attach the output of `perl -V` Also, what version of Test::More are you using? `perl -MTest::More -e 'print "$Test::More::VERSION\n"'` Note: Your example works for me on MacOS 10.5 (perl 5.8.8) and RHEL 5 (perl 5.8.8). I tested with forks 0.33, and Test::More 0.62 and 0.86. The original attached script works for me with the following minor changes: 1. Used forks before Test::More. See: http://search.cpan.org/~rybskej/forks- 0.33/lib/forks.pm#module_load_order:_forks_first 2. Added a test plan (tests=>4). 3. Commented out "unlock $var1;". Not sure what this was, but ithreads variables unlock automatically at end of scope. There is no interface function to unlock. 4. Commented out calls for missing subroutine done_testing(). Updated test script is attached for reference. Regards, Eric On Wed Nov 18 14:55:13 2009, toddr@null.net wrote: Show quoted text
> An even simpler example is causing a segfault on perl: > > #!perl > > use forks; > use forks::shared; > > my $var1 :shared; > > eval { > lock $var1; > die("This message"); > }; > > print "I never get here\n";
#!perl use strict; use warnings; use forks; use forks::shared; use Test::More tests=>4; my $var1 :shared; my $thr = threads->new({'context' => 'list'}, sub { fork_eval(); }); $thr->join(); my $thr2 = threads->new({'context' => 'list'}, sub { fork_eval_lock(); }); $thr2->join(); exit; sub fork_eval { ok(1, "This test reached"); my $error_message = "ERROR_MESSAGE_HERE"; eval { die($error_message); }; like($@, qr/^$error_message/, "Error message received"); #done_testing(); } sub fork_eval_lock { ok(1, "This test reached"); my $error_message = "ERROR_MESSAGE_HERE"; eval { lock $var1; $var1 = 'fork'; #unlock $var1; die($error_message); }; like($@, qr/^$error_message/, "Error message received but this test never reached."); #done_testing(); }
This is a 64bit perl running on Snow Leopard. It did not come with the OS. $>perl -V Summary of my perl5 (revision 5 version 10 subversion 1) configuration: Platform: osname=darwin, osvers=10.0.0, archname=darwin-thread-multi-2level uname='darwin toddr.local 10.0.0 darwin kernel version 10.0.0: fri jul 31 22:47:34 pdt 2009; root:xnu-1456.1.25~1release_i386 i386 ' config_args='' 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 ='-fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/opt/local/include', optimize='-O3', cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN -no-cpp-precomp -fno- strict-aliasing -pipe -fstack-protector -I/usr/local/include -I/opt/local/include' ccversion='', gccversion='4.2.1 (Apple Inc. build 5646)', 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='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-protector - L/usr/local/lib -L/opt/local/lib' libpth=/usr/local/lib /opt/local/lib /usr/lib libs=-ldbm -ldl -lm -lutil -lc perllibs=-ldl -lm -lutil -lc libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/usr/local/lib - L/opt/local/lib -fstack-protector' Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_ALL USE_64_BIT_INT USE_FAST_STDIO USE_ITHREADS USE_LARGE_FILES USE_PERLIO Built under darwin Compiled at Oct 5 2009 13:52:26 %ENV: @INC: /usr/local/perl/510/lib/5.10.1/darwin-thread-multi-2level /usr/local/perl/510/lib/5.10.1 /usr/local/perl/510/lib/5.10.1/darwin-thread-multi-2level /usr/local/perl/510/lib/5.10.1
Test::More version is 0.94. The new Test::More design is to no longer explicitly list your test count, but rather declare done_testing() when you're done. Concerning the use of Test::More, this example fails without Test::More. I was just using it for example. Feel free to take it out and it should equally segfault (see simpler example above)
output from simple example: $>cat shfork.pl #!perl use forks; use forks::shared; my $var1 :shared; eval { lock $var1; die("This message"); }; print "I never get here\n"; $>perl shfork.pl zsh: segmentation fault perl shfork.pl
forks has been tested Perl 10.0 on a variety platforms (including OS 10.5). I've personally tested against Apple and macports Perl distributions. Can you rebuild forks (perl Makefile.PL && make && make test) from a clean forks distribution and capture the results? I'd be curious to see if there are any build warnings, related to the 64-bit OS. I've ordered 10.6, so I should have a better chance of replicating this issue soon. I'll update as progress is made. -Eric On Tue Nov 24 00:18:12 2009, toddr@null.net wrote: Show quoted text
> This is a 64bit perl running on Snow Leopard. It did not come with the > OS. > > $>perl -V > Summary of my perl5 (revision 5 version 10 subversion 1) > configuration: > > Platform: > osname=darwin, osvers=10.0.0, archname=darwin-thread-multi-2level > uname='darwin toddr.local 10.0.0 darwin kernel version 10.0.0: fri > jul 31 22:47:34 pdt > 2009; root:xnu-1456.1.25~1release_i386 i386 ' > config_args='' > 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 ='-fno-common -DPERL_DARWIN -no-cpp-precomp > -fno-strict-aliasing > -pipe -fstack-protector -I/usr/local/include -I/opt/local/include', > optimize='-O3', > cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN > -no-cpp-precomp -fno- > strict-aliasing -pipe -fstack-protector -I/usr/local/include > -I/opt/local/include' > ccversion='', gccversion='4.2.1 (Apple Inc. build 5646)', > 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='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' > -fstack-protector - > L/usr/local/lib -L/opt/local/lib' > libpth=/usr/local/lib /opt/local/lib /usr/lib > libs=-ldbm -ldl -lm -lutil -lc > perllibs=-ldl -lm -lutil -lc > libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false, > libperl=libperl.a > gnulibc_version='' > Dynamic Linking: > dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' > cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup > -L/usr/local/lib - > L/opt/local/lib -fstack-protector' > > > Characteristics of this binary (from libperl): > Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV > PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP > USE_64_BIT_ALL > USE_64_BIT_INT USE_FAST_STDIO USE_ITHREADS > USE_LARGE_FILES USE_PERLIO > Built under darwin > Compiled at Oct 5 2009 13:52:26 > %ENV: > @INC: > /usr/local/perl/510/lib/5.10.1/darwin-thread-multi-2level > /usr/local/perl/510/lib/5.10.1 > /usr/local/perl/510/lib/5.10.1/darwin-thread-multi-2level > /usr/local/perl/510/lib/5.10.1
From: toddr [...] null.net
Basic build run. I note some warnings in test 7 cpan[1]> look forks CPAN: CPAN::SQLite loaded ok (v0.198) Database was generated on Mon, 07 Dec 2009 21:50:16 GMT Running look for module 'forks' Trying to open a subshell in the build directory... CPAN: YAML loaded ok (v0.70) CPAN: Digest::SHA loaded ok (v5.47) CPAN: Compress::Zlib loaded ok (v2.022) Checksum for /var/root/.cpan/sources/authors/id/R/RY/RYBSKEJ/forks-0.33.tar.gz ok Scanning cache /var/root/.cpan/build for sizes ............................................................................DONE CPAN: Archive::Tar loaded ok (v1.54) forks-0.33/ forks-0.33/CHANGELOG forks-0.33/CREDITS forks-0.33/forks.xs forks-0.33/lib/ forks-0.33/lib/forks/ forks-0.33/lib/forks/Devel/ forks-0.33/lib/forks/Devel/Symdump.pm forks-0.33/lib/forks/shared/ forks-0.33/lib/forks/shared/attributes.pm forks-0.33/lib/forks/shared/global_filter.pm forks-0.33/lib/forks/shared.pm forks-0.33/lib/forks/signals.pm forks-0.33/lib/forks.pm forks-0.33/lib/threads/ forks-0.33/lib/threads/shared/ forks-0.33/lib/threads/shared/array.pm forks-0.33/lib/threads/shared/handle.pm forks-0.33/lib/threads/shared/hash.pm forks-0.33/lib/threads/shared/scalar.pm forks-0.33/Makefile.PL forks-0.33/MANIFEST forks-0.33/MANIFEST.skip forks-0.33/META.yml forks-0.33/ppport.h forks-0.33/README forks-0.33/SIGNATURE forks-0.33/t/ forks-0.33/t/forks00-sigtrap.t forks-0.33/t/forks01.t forks-0.33/t/forks02.t forks-0.33/t/forks03.t forks-0.33/t/forks04.t forks-0.33/t/forks05.t forks-0.33/t/forks06.t forks-0.33/t/forks07.t forks-0.33/t/forks08.t forks-0.33/t/forks09.t forks-0.33/t/forks10.t forks-0.33/t/forks20.t forks-0.33/t/forks99.t forks-0.33/TODO forks-0.33/VERSION CPAN: File::Temp loaded ok (v0.22) Working directory is /var/root/.cpan/build/forks-0.33-b0XxyR 091208.115641 root@toddr.local (/var/root/.cpan/build/forks-0.33-b0XxyR) $>perl Makefile.PL Fixing prototypes in forks.xs Checking if your kit is complete... Looks good Writing Makefile for forks 091208.115644 root@toddr.local (/var/root/.cpan/build/forks-0.33-b0XxyR) $>make cp lib/forks/signals.pm blib/lib/forks/signals.pm cp lib/forks/shared/global_filter.pm blib/lib/forks/shared/global_filter.pm cp lib/threads/shared/array.pm blib/lib/threads/shared/array.pm cp lib/forks.pm blib/lib/forks.pm cp lib/forks/shared.pm blib/lib/forks/shared.pm cp lib/forks/Devel/Symdump.pm blib/lib/forks/Devel/Symdump.pm cp lib/forks/shared/attributes.pm blib/lib/forks/shared/attributes.pm cp lib/threads/shared/hash.pm blib/lib/threads/shared/hash.pm cp lib/threads/shared/handle.pm blib/lib/threads/shared/handle.pm cp lib/threads/shared/scalar.pm blib/lib/threads/shared/scalar.pm /usr/local/perl/510/bin/perl /usr/local/perl/510/lib/5.10.1/ExtUtils/xsubpp -typemap /usr/local/perl/510/lib/5.10.1/ExtUtils/typemap forks.xs > forks.xsc && mv forks.xsc forks.c cc -c -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include - I/opt/local/include -O3 -DVERSION=\"0.33\" -DXS_VERSION=\"0.33\" "-I/usr/local/perl/510/lib/5.10.1/darwin-thread-multi- 2level/CORE" forks.c Running Mkbootstrap for forks () chmod 644 forks.bs rm -f blib/arch/auto/forks/forks.bundle env MACOSX_DEPLOYMENT_TARGET=10.3 cc -bundle -undefined dynamic_lookup -L/usr/local/lib -L/opt/local/lib -fstack-protector forks.o -o blib/arch/auto/forks/forks.bundle \ \ chmod 755 blib/arch/auto/forks/forks.bundle cp forks.bs blib/arch/auto/forks/forks.bs chmod 644 blib/arch/auto/forks/forks.bs Manifying blib/man3/forks::signals.3 Manifying blib/man3/threads::shared::array.3 Manifying blib/man3/forks::Devel::Symdump.3 Manifying blib/man3/forks::shared.3 Manifying blib/man3/forks.3 Manifying blib/man3/threads::shared::hash.3 Manifying blib/man3/threads::shared::handle.3 Manifying blib/man3/threads::shared::scalar.3 091208.115649 root@toddr.local (/var/root/.cpan/build/forks-0.33-b0XxyR) $>make test PERL_DL_NONLAZY=1 /usr/local/perl/510/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/forks00-sigtrap.t .. ok t/forks01.t .......... # # These tests exercise general API compatibility and behavior. # t/forks01.t .......... ok t/forks02.t .......... # # The following tests are a stress test for shared arrays and shared hashes # that may take a few minutes on slower machines. # t/forks02.t .......... ok t/forks03.t .......... # # The following tests check that blessing shared variables is fully transparent. # t/forks03.t .......... ok t/forks04.t .......... # # These tests exercise general API compatibility and behavior (threads.pm replacement mode). # t/forks04.t .......... ok t/forks05.t .......... # # These tests validate main thread exit values. # t/forks05.t .......... ok t/forks06.t .......... # # These tests exercise deadlock detection and resolution features of forks. # t/forks06.t .......... ok t/forks07.t .......... # # These tests check inter-thread signaling. # Signal SIGTERM received, but no signal handler set for thread 1 t/forks07.t .......... ok t/forks08.t .......... # # These tests validate overloaded sleep behavior. # t/forks08.t .......... ok t/forks09.t .......... # # These tests check shared_clone functionality. # t/forks09.t .......... ok t/forks10.t .......... # # These tests check CLONE and SKIP_CLONE functionality. # t/forks10.t .......... ok t/forks20.t .......... # # These tests validate compatibility with Thread::Queue. # t/forks20.t .......... ok t/forks99.t .......... skipped: Set the environment variable TEST_SIGNATURE to enable this test. All tests successful. Files=13, Tests=389, 156 wallclock secs ( 0.11 usr 0.04 sys + 6.79 cusr 1.93 csys = 8.87 CPU) Result: PASS
detailed output from test 07 $>prove -lvm t/forks07.t t/forks07.t .. 1..3 # # These tests check inter-thread signaling. # Signal SIGTERM received, but no signal handler set for thread 1 ok 1 - Check that thread is no longer running ok 2 - Check that thread is no longer running ok 3 - Check that custom signal handler was used ok All tests successful. Files=1, Tests=3, 13 wallclock secs ( 0.01 usr 0.01 sys + 0.17 cusr 0.04 csys = 0.23 CPU) Result: PASS
I made some mods to the test script to locate the message. I notice weirdness as to when diag/ok outputs relative to the message. I assume this is just a result of how long ok takes to run.: Code changes: use Test::More tests => 4; use strict; use warnings; diag( "Test::More instantiated"); my $thr = threads->new(sub { while (1) { sleep 1; } }); sleep 3; diag("Sending kill TERM"); $thr->kill('TERM'); diag("Kill sent"); ok(1, "Kill sent via ok"); sleep 3; ok(!$thr->is_running(), 'Check that thread is no longer running'); OUTPUT: t/forks07.t .. 1..4 # # These tests check inter-thread signaling. # I'm patching test builder # Test::More instantiated # Sending kill TERM # Kill sent Signal SIGTERM received, but no signal handler set for thread 1 ok 1 - Kill sent via ok ok 2 - Check that thread is no longer running ok 3 - Check that thread is no longer running ok 4 - Check that custom signal handler was used ok All tests successful. Files=1, Tests=4, 12 wallclock secs ( 0.02 usr 0.01 sys + 0.17 cusr 0.04 csys = 0.24 CPU) Result: PASS
From: bitcard [...] faxm0dem.org
Hi, I'm not sure this is related, but the words "eval" and "lock" rang a bell. The attached script works perfectly well on various perl versions on linux. However, on Solaris 10 (tested using OS shipped perl 5.8.4 see perl -V at the end) I get: # ./queues2 Thread 1 terminated abnormally: lock can only be used on shared values at ./queu es line 10 at /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int/forks.pm line 807 Thread 2 terminated abnormally: lock can only be used on shared values at ./queu es line 17 at /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int/forks.pm line 807 However, if I replace the string eval by a block eval, or if I just skip the eval block and use at compile time, things run fine. # perl -V Summary of my perl5 (revision 5 version 8 subversion 4) configuration: Platform: osname=solaris, osvers=2.10, archname=i86pc-solaris-64int uname='sunos localhost 5.10 i86pc i386 i86pc' config_args='' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=unde f useperlio=define d_sfio=undef uselargefiles=define usesocks=undef use64bitint=define use64bitall=undef uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_TS_ERRNO', optimize='-xO3 -xspace -xildoff', cppflags='' ccversion='Sun WorkShop', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lsee ksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags ='' libpth=/lib /usr/lib /usr/ccs/lib libs=-lsocket -lnsl -ldl -lm -lc perllibs=-lsocket -lnsl -ldl -lm -lc libc=/lib/libc.so, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-R /usr/perl5/5.8. 4/lib/i86pc-solaris-64int/CORE' cccdlflags='-KPIC', lddlflags='-G' Characteristics of this binary (from libperl): Compile-time options: USE_64_BIT_INT USE_LARGE_FILES Locally applied patches: 22667 The optree builder was looping when constructing the ops ... 22715 Upgrade to FileCache 1.04 22733 Missing copyright in the README. 22746 fix a coredump caused by rv2gv not fully converting a PV ... 22755 Fix 29149 - another UTF8 cache bug hit by substr. 22774 [perl #28938] split could leave an array without ... 22775 [perl #29127] scalar delete of empty slice returned garbage 22776 [perl #28986] perl -e "open m" crashes Perl 22777 add test for change #22776 ("open m" crashes Perl) 22778 add test for change #22746 ([perl #29102] Crash on assign ... 22781 [perl #29340] Bizarre copy of ARRAY make sure a pad op's ... 22796 [perl #29346] Double warning for int(undef) and abs(undef) ... 22818 BOM-marked and (BOMless) UTF-16 scripts not working 22823 [perl #29581] glob() misses a lot of matches 22827 Smoke [5.9.2] 22818 FAIL(F) MSWin32 WinXP/.Net SP1 (x86/1 cpu) 22830 [perl #29637] Thread creation time is hypersensitive 22831 improve hashing algorithm for ptr tables in perl_clone: ... 22839 [perl #29790] Optimization busted: '@a = "b", sort @a' ... 22850 [PATCH] 'perl -v' fails if local_patches contains code snippets 22852 TEST needs to ignore SCM files 22886 Pod::Find should ignore SCM files and dirs 22888 Remove redundant %SIG assignments from FileCache 23006 [perl #30509] use encoding and "eq" cause memory leak 23074 Segfault using HTML::Entities 23106 Numeric comparison operators mustn't compare addresses of ... 23320 [perl #30066] Memory leak in nested shared data structures ... 23321 [perl #31459] Bug in read() 27722 perlio.c breaks on Solaris/gcc when > 256 FDs are available SPRINTF0 - fixes for sprintf formatting issues - CVE-2005-3962 6663288 Upgrade to CGI.pm 3.33 REGEXP0 - fix for UTF-8 recoding in regexps - CVE-2007-5116 6758953 Perl Sys::Syslog can log messages with wrong severity Built under solaris Compiled at May 20 2009 22:16:00 %ENV: PERL5LIB="/home/sysunix/perl5/lib/perl5/i86pc-solaris-64int:/home/sysunix/pe rl5/lib/perl5:/home/sysunix/perl5/lib/perl5/i86pc-solaris-64int:/home/sysunix/pe rl5/lib/perl5:/home/sysunix/perl5/lib/perl5/i86pc-solaris-64int:/home/sysunix/pe rl5/lib/perl5" PERL_MM_OPT="INSTALL_BASE=/home/sysunix/perl5" @INC: /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5 /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5 /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5/i86pc-solaris-64int /home/sysunix/perl5/lib/perl5 /usr/perl5/5.8.4/lib/i86pc-solaris-64int /usr/perl5/5.8.4/lib /usr/perl5/site_perl/5.8.4/i86pc-solaris-64int /usr/perl5/site_perl/5.8.4 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.8.4/i86pc-solaris-64int /usr/perl5/vendor_perl/5.8.4 /usr/perl5/vendor_perl .
Subject: queues2
Download queues2
application/octet-stream 465b

Message body not shown because it is not plain text.