RDBO: Exceptions in before_*/after_*-Hooks bubblen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 19 Apr 2013 12:14:02 +0000 (14:14 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 19 Apr 2013 12:14:30 +0000 (14:14 +0200)
SL/DB/Object.pm

index 1c7c050..8b86e97 100755 (executable)
@@ -134,12 +134,12 @@ sub save {
 
   my ($result, $exception);
   my $worker = sub {
-    SL::DB::Object::Hooks::run_hooks($self, 'before_save');
     $exception = $EVAL_ERROR unless eval {
+      SL::DB::Object::Hooks::run_hooks($self, 'before_save');
       $result = $self->SUPER::save(@args);
+      SL::DB::Object::Hooks::run_hooks($self, 'after_save', $result);
       1;
     };
-    SL::DB::Object::Hooks::run_hooks($self, 'after_save', $result);
 
     return $result;
   };
@@ -156,12 +156,12 @@ sub delete {
 
   my ($result, $exception);
   my $worker = sub {
-    SL::DB::Object::Hooks::run_hooks($self, 'before_delete');
     $exception = $EVAL_ERROR unless eval {
+      SL::DB::Object::Hooks::run_hooks($self, 'before_delete');
       $result = $self->SUPER::delete(@args);
+      SL::DB::Object::Hooks::run_hooks($self, 'after_delete', $result);
       1;
     };
-    SL::DB::Object::Hooks::run_hooks($self, 'after_delete', $result);
 
     return $result;
   };