From d16768f61ceb702a406980e2049f0448cd054bca Mon Sep 17 00:00:00 2001 From: erickson Date: Tue, 30 Nov 2010 14:04:48 +0000 Subject: [PATCH] back-porting cstoreditor fixes to help prevent transaction leaking git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@18871 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../src/perlmods/OpenILS/Utils/CStoreEditor.pm | 35 ++++++++++++++++++---- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/Open-ILS/src/perlmods/OpenILS/Utils/CStoreEditor.pm b/Open-ILS/src/perlmods/OpenILS/Utils/CStoreEditor.pm index 66345b0dfc..984562362e 100644 --- a/Open-ILS/src/perlmods/OpenILS/Utils/CStoreEditor.pm +++ b/Open-ILS/src/perlmods/OpenILS/Utils/CStoreEditor.pm @@ -76,6 +76,11 @@ sub new { return $self; } +sub DESTROY { + my $self = shift; + $self->reset; + return undef; +} sub app { my( $self, $app ) = @_; @@ -289,13 +294,24 @@ sub rollback_savepoint { # ----------------------------------------------------------------------------- sub rollback { my $self = shift; - $self->xact_rollback; - $self->disconnect; + my $err; + my $ret; + try { + $self->xact_rollback; + } catch Error with { + $err = shift + } finally { + $ret = $self->disconnect + }; + throw $err if ($err); + return $ret; } sub disconnect { my $self = shift; - $self->session->disconnect if $self->{session}; + $self->session->disconnect if + $self->{session} and + $self->{session}->state == OpenSRF::AppSession::CONNECTED(); delete $self->{session}; } @@ -327,8 +343,17 @@ sub reset { # ----------------------------------------------------------------------------- sub finish { my $self = shift; - $self->commit; - $self->reset; + my $err; + my $ret; + try { + $self->commit; + } catch Error with { + $err = shift + } finally { + $ret = $self->reset + }; + throw $err if ($err); + return $ret; } -- 2.11.0