back-porting cstoreditor fixes to help prevent transaction leaking
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 30 Nov 2010 14:04:48 +0000 (14:04 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 30 Nov 2010 14:04:48 +0000 (14:04 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/rel_1_6@18871 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Utils/CStoreEditor.pm

index 66345b0..9845623 100644 (file)
@@ -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;
 }