X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FApp%2FClifton%2FComponent.pm;h=7f80acda7b526b738c415af67b23c0a6b63c1ac6;hb=21a188635ffc74827f2860bab517cbd829c5ccd6;hp=7b153f0bb5d755fbfbf8e9848be42aac1b2400f7;hpb=46b150cd037bc237a01ccf88ba0e49680fcda786;p=scpubgit%2FClifton.git diff --git a/lib/App/Clifton/Component.pm b/lib/App/Clifton/Component.pm index 7b153f0..7f80acd 100644 --- a/lib/App/Clifton/Component.pm +++ b/lib/App/Clifton/Component.pm @@ -35,9 +35,29 @@ sub _new_child { } } +around _replace_weakself => sub { + my ($orig, $self) = (shift, shift); + $self->_eval_cb($self->$orig(@_)); +}; + +around _capture_weakself => sub { + my ($orig, $self) = (shift, shift); + $self->_eval_cb($self->$orig(@_)); +}; + sub _schedule { my ($self, $code) = @_; - $self->get_loop->later($code); + $self->get_loop->later($self->_eval_cb($code)); +} + +sub _eval_cb { + my ($self, $code) = @_; + my $str = "$self"; + sub { + local $@; + eval { $code->(@_); 1 } + or log_error { "Exception from ${self}: $@" }; + }; } sub DESTROY {