avoid deadlocks, RT#10574
authorivan <ivan>
Fri, 29 Apr 2011 01:13:20 +0000 (01:13 +0000)
committerivan <ivan>
Fri, 29 Apr 2011 01:13:20 +0000 (01:13 +0000)
FS/bin/freeside-torrus-srvderive
torrus/perllib/Torrus/Collector/ExtDBI.pm

index e8626e1..a02d23e 100644 (file)
@@ -102,8 +102,10 @@ while (1) {
       exit unless @serviceids; #don't try to search for empty virtual ports
 
       #nonlocking select statements; rows in this table never change
-      dbh->do('SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED')
-        if driver_name eq 'mysql';
+      if ( driver_name eq 'mysql' ) {
+        dbh->do('SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');
+        dbh->commit or die dbh->errstr;
+      }
 
       my @in = ();
       for my $dir ('_IN', '_OUT') {
index 7d13941..a4fe4fc 100644 (file)
@@ -14,7 +14,7 @@
 #  along with this program; if not, write to the Free Software
 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
 
-# $Id: ExtDBI.pm,v 1.1 2010-12-27 00:03:58 ivan Exp $
+# $Id: ExtDBI.pm,v 1.2 2011-04-29 01:13:20 ivan Exp $
 # Stanislav Sinyagin <ssinyagin@yahoo.com>
 
 ## Pluggable backend module for ExternalStorage
@@ -63,6 +63,12 @@ sub backendOpenSession
     
     if( defined( $dbh ) )
     {
+
+        if ( $dbh->{Driver}->{Name} =~ /^mysql/i ) {
+          $dbh->do('SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');
+          $dbh->commit();
+        }
+
         $sth = $dbh->prepare( Torrus::SQL::SrvExport->sqlInsertStatement() );
         if( not defined( $sth ) )
         {