);
};
- eval {
- # if it throws - good, we'll go down to the do{} below
+ dbic_internal_try {
+ # if it throws - good, we'll assign to @args in the end
# if it doesn't - do different things depending on RV truthiness
if( $act->(@args) ) {
$args[0] = (
"Invocation of the exception_action handler installed on $self did *not*"
.' result in an exception. DBIx::Class is unable to function without a reliable'
- .' exception mechanism, ensure that exception_action does not hide exceptions'
+ .' exception mechanism, ensure your exception_action does not hide exceptions'
." (original error: $args[0])"
);
}
);
}
- $guard_disarmed = 1;
+ 1;
}
-
- or
-
- do {
+ catch {
# We call this to get the necessary warnings emitted and disregard the RV
- # as it's definitely an exception if we got as far as this do{} block
- is_exception($@);
-
- $guard_disarmed = 1;
- $args[0] = $@;
+ # as it's definitely an exception if we got as far as this catch{} block
+ is_exception(
+ $args[0] = $_
+ );
};
+
+ # Done guarding against https://github.com/PerlDancer/Dancer2/issues/1125
+ $guard_disarmed = 1;
}
DBIx::Class::Exception->throw( $args[0], $self->stacktrace );
sub ddl_filename {
my ($self, $type, $version, $dir, $preversion) = @_;
- require File::Spec;
-
$version = "$preversion-$version" if $preversion;
my $class = blessed($self) || $self;
$class =~ s/::/-/g;
- return File::Spec->catfile($dir, "$class-$version-$type.sql");
+ return "$dir/$class-$version-$type.sql";
}
=head2 thaw
# however beware - on older perls the exception seems randomly untrappable
# due to some weird race condition during thread joining :(((
if (length ref $srcs->{$source_name} and refcount($srcs->{$source_name}) > 1) {
+ local $SIG{__DIE__} if $SIG{__DIE__};
local $@;
eval {
$srcs->{$source_name}->schema($self);
last;
}
}
+
+ # Dummy NEXTSTATE ensuring the all temporaries on the stack are garbage
+ # collected before leaving this scope. Depending on the code above, this
+ # may very well be just a preventive measure guarding future modifications
+ undef;
}
sub _unregister_source {