use warnings;
use strict;
-use DBIx::Class::Exception;
use DBIx::Class::Carp;
use Context::Preserve 'preserve_context';
-use DBIx::Class::_Util qw( is_exception qsub dbic_internal_try );
+use DBIx::Class::_Util qw( is_exception qsub dbic_internal_try dbic_internal_catch );
use Scalar::Util qw(weaken blessed reftype);
-use Try::Tiny;
use Moo;
use namespace::clean;
$txn_begin_ok = 1;
}
$cref->( @$args );
- } catch {
+ } dbic_internal_catch {
$run_err = $_;
(); # important, affects @_ below
};
$storage->txn_commit;
1;
}
- catch {
+ dbic_internal_catch {
$run_err = $_;
};
}
# FIXME - we assume that $storage->{_dbh_autocommit} is there if
# txn_init_depth is there, but this is a DBI-ism
$txn_init_depth > ( $storage->{_dbh_autocommit} ? 0 : 1 )
- ) or ! $self->retry_handler->($self)
+ )
+ or
+ ! do {
+ local $self->storage->{_in_do_block_retry_handler} = 1
+ unless $self->storage->{_in_do_block_retry_handler};
+ $self->retry_handler->($self)
+ }
);
# we got that far - let's retry