Apache-Sybase-ConPool
view release on metacpan or search on metacpan
sub initialize {
my $file = shift;
loadConfig($file);
my $verbose = $config{'DbVerbose'};
my $hostname = hostname;
($hostname) = split(/\./, $hostname);
my $timeout = $config{'DbTimeout'} || 30;
if(ct_config(CS_SET, CS_TIMEOUT, $timeout, CS_INT_TYPE) != CS_SUCCEED) {
warn "[ConPool] ct_config(CS_TIMEOUT) failed\n";
}
my $max_connect = $config{'DbNumConnect'} || 40;
ct_config(CS_SET, CS_MAX_CONNECT, $max_connect, CS_INT_TYPE);
for(my $i = 1; $i <= $config{DbNumPools} || 1; ++$i) {
my $data = $config{"ConPool$i"};
if(!$data) {
my $count = $share{$srv}->{COUNT};
my $sem = new IPC::Semaphore($key, 0, 0666);
my $r;
my $used = 0;
my $sleep = 0;
my %ignore;
my $sleepTime = $config{'DbSleepTime'} || 0.25;
my $semTimeout = $config{'SemTimeout'} || 30;
my $now = time;
eval {
my $h = Sys::Signal->set(ALRM => sub { die "Timeout\n"; } );
alarm($semTimeout);
$r = $sem->op(0, -1, 0);
alarm(0);
};
if($@ && $@ =~ /Timeout/) {
warn "[ConPool] semaphore timed out for $srv\n";
return undef;
}
my $diff = time - $now;
if($diff) {
warn "[ConPool] Semaphore acquisition for $srv: $diff seconds\n";
}
RETRY:;
( run in 0.815 second using v1.01-cache-2.11-cpan-a5abf4f5562 )