From: erickson Date: Tue, 30 Nov 2010 14:05:09 +0000 (+0000) Subject: back-porting cstoreditor fixes to help prevent transaction leaking X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=9b6cf0f7c744261cb91393fd2e1a88f4bbde04e3;p=working%2FEvergreen.git back-porting cstoreditor fixes to help prevent transaction leaking git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6_1@18872 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- 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; }