Hi,
I have a test perl script that opens a connection to a db. I was just
playing with threads to see if I could get 10 workers each with
their own db connection.
The problem is that if just the threads instantiate a DB instance
its okay, if the main script instantiates a db handle beforehand,
it throws an error ;
"thread failed to start: DB::mysql::dr failed to connect: handle 1
owned by thread b08382"
The sleeps are there just to make sure each thread/main
doesn't exit.
----------------------------------------------------
use strict;
use Debug;
use threads;
use threads::shared;
use Database;
my $db;
# if i comment out the line below the script works ! :(
ConnectToDB( S_DB => \$db );
sub ConnectToDB
{
my (%args) = @_;
my ($s_db) = $args{S_DB};
my ($dbg) = new Debug(
DEBUG_IS_OFF => 1
);
$$s_db = new Database(
DRIVER => 'mysql',
DEBUG => $dbg
);
if (!$$s_db->ConnectToDB(
SERVER => '*',
PORT => '*',
USER => '*',
PASSWORD => '*',
DATABASE => '*',
TRACE_LEVEL => '0',
)
)
{
print "Cannot connect to database\n";
}
}
sub ClientWorker
{
my $number = shift;
my ($db);
ConnectToDB( S_DB => \$db );
print "Thread $number just connected to db ($db) handle
($db->{DBH}))\n";
sleep 20;
}
foreach my $number (1..5)
{
my $thr = threads->new( \&ClientWorker, $number );
}
while (1)
{
sleep 5;
}
----------------------------------------------------
Regards
Nick