Subject: | Thread::Pool Bug v0.33 |
Date: | Tue, 16 Nov 2010 14:52:31 +0100 |
To: | bug-Thread-Pool [...] rt.cpan.org |
From: | Richard Leitner <Richard.Leitner [...] sonydadc.com> |
Hello,
I'm Richard Leitner, from Salzburg, Austria and I think I found a Bug in
your perl Module Thread::Pool (0.33).
But first of all: I'm sorry for my not very good english and hope you
understand most of it.
So, now to my Bugreport:
the following script doesn't print out the text in the job nor the text
after the call of the job.
So the file /root/scripts/foo in which the output is piped looks like this:
daemonized, PID=14222
and nothing more
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(setsid);
use Thread::Pool;
my $pool = Thread::Pool->new(
{
workers => 5,
minjobs => 1,
maxjobs => 10,
do => sub { print STDERR "I'm a thread, arguments are: @_\n"},
},
);
chdir '/' or die "Can't chdir to /: $!";
umask 0;
# disable STD*
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, ">>/root/scripts/foo" or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
print STDERR "daemonized, PID=$$\n";
$pool->job( qw( a b c ) );
print STDERR "after-thread\n";
when i require the Thread::Pool package after the daemonize of my script it
works flawless
so in this way the script works:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(setsid);
chdir '/' or die "Can't chdir to /: $!";
umask 0;
# disable STD*
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, ">>/root/scripts/foo" or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
require Thread::Pool;
my $pool = Thread::Pool->new(
{
workers => 5,
minjobs => 1,
maxjobs => 10,
do => sub { print STDERR "I'm a thread, arguments are: @_\n"},
},
);
print STDERR "daemonized, PID=$$\n";
$pool->job( qw( a b c ) );
print STDERR "after-thread\n";
another imo strange behavior is the following one:
in the case i "use" the Thread::Pool package at the top of the script and
create a new pool after the deamonize, the file "foo" stays empty.
so in this way the output stays completle empty
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(setsid);
use Thread::Pool;
chdir '/' or die "Can't chdir to /: $!";
umask 0;
# disable STD*
open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
open STDOUT, '>/dev/null' or die "Can't write to /dev/null: $!";
open STDERR, ">>/root/scripts/foo" or die "Can't write to /dev/null: $!";
defined(my $pid = fork) or die "Can't fork: $!";
exit if $pid;
setsid or die "Can't start a new session: $!";
my $pool = Thread::Pool->new(
{
workers => 5,
minjobs => 1,
maxjobs => 10,
do => sub { print STDERR "I'm a thread, arguments are: @_\n"},
},
);
print STDERR "daemonized, PID=$$\n";
$pool->job( qw( a b c ) );
print STDERR "after-thread\n";
My perl -V is:
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.26-2-amd64,
archname=i486-linux-gnu-thread-multi
uname='linux puccini 2.6.26-2-amd64 #1 smp fri aug 14 07:12:04 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/share/perl5
-Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local
-Dsitelib=/usr/local/share/perl/5.10.0
-Dsitearch=/usr/local/lib/perl/5.10.0 -Dman1dir=/usr/share/man/man1
-Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1
-Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl
-Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm
-DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.10.0
-Dd_dosuid -des'
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.2', 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.7.so, so=so, useshrplib=true,
libperl=libperl.so.5.10.0
gnulibc_version='2.7'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/usr/local/lib'
Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_ITHREADS
USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API
Built under linux
Compiled at Aug 28 2009 22:15:29
@INC:
/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
.
My uname -a is:
Linux Monlx01 2.6.26-2-686-bigmem #1 SMP Wed May 12 22:49:37 UTC 2010 i686
GNU/Linux
My version of the POSIX module is: 1.13
I hope this bugreport helps you to improve the module.
Because with my little workaround it works perfectly and I think it's a
really nice module!
If you have further questions to the bug, please feel free to contact me!
kind regards,
Richard Leitner
Message body is not shown because it is too large.