From e6e4b5d15b4d61c90084f09610d57898fd055423 Mon Sep 17 00:00:00 2001 From: cmaffio Date: Thu, 7 Apr 2016 10:52:22 +0200 Subject: [PATCH] Fix kill thread db --- proxy/conntrack.pl | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/proxy/conntrack.pl b/proxy/conntrack.pl index 8e5c658..aaf3d95 100755 --- a/proxy/conntrack.pl +++ b/proxy/conntrack.pl @@ -52,14 +52,15 @@ while ( $ref = $sts->fetchrow_hashref ) { my $port = $$ref{'port'}; my $nome = $$ref{'nome'}; $proc{$nome} = threads->create(\&conntrack, $id, $ip, $port); + print "Attivato processo $nome\n" if ($verbose); } while (1) { sleep 30; - while (($variabile, $puntatore) = each %proc) { + while (my ($variabile, $puntatore) = each %proc) { if(!$puntatore or !$puntatore->is_running ) { - print "Rilevato termine processo $variabile, riavvio" if ($verbose); - $puntatore->detach(); + print "Rilevato termine processo $variabile\n" if ($verbose); + #$puntatore->detach(); if ($variabile eq "database") { $proc{'database'} = threads->create(\&database); @@ -68,14 +69,13 @@ while (1) { $sts = $dbmysql->prepare($query); $sts->execute (); $ref = $sts->fetchrow_hashref; - my $id = $$ref{'id'}; - my $ip = $$ref{'ip'}; - my $port = $$ref{'port'}; + my $id = $$ref{'id'}; + my $ip = $$ref{'ip'}; + my $port = $$ref{'port'}; $proc{$$variabile} = threads->create(\&conntrack, $id, $ip, $port); } } } - } exit; @@ -151,18 +151,30 @@ sub conntrack { sub database { print "Attivato thread DB\n" if ($verbose); - my $dbmysql = DBI->connect("DBI:mysql:;host=$DBhost", $DBuser, $DBpass) or die ($DBI::errstr); - $sts = $dbmysql->prepare("use $DBname"); - $sts->execute (); + $dbmysql = DBConn (); while (1) { print "DB in attesa\n" if ($verbose > 1); $sem2->down(); print "Query arrivata\n" if ($verbose > 1); + + if ( not $dbmysql->ping ) { + $dbmysql = DBConn (); + } + my $sts = $dbmysql->prepare($queryDB); - $sts->execute () || die; + $sts->execute (); $sts->finish; $sem1->up(); } } + +sub DBConn { + print "Connessione DB\n" if ($verbose > 1); + my $dbmysql = DBI->connect("DBI:mysql:;host=$DBhost", $DBuser, $DBpass, {PrintError => 0, RaiseError => 0, AutoCommit =>1, mysql_auto_reconnect=>1} ) or die ($DBI::errstr); + $sts = $dbmysql->prepare("use $DBname"); + $sts->execute (); + + return $dbmysql; +}