X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FObject-Remote.git;a=blobdiff_plain;f=lib%2FObject%2FRemote%2FRole%2FLogForwarder.pm;h=ce5bbc28133749165342b83e24567c89511d0162;hp=1ff8e5f569b5015006031cd475d1959da5e4e1af;hb=54b64f99be532930bd97b0fd2418675302aa7a1e;hpb=a27266b77a5c66f0c059c865193f64871d0dd90c diff --git a/lib/Object/Remote/Role/LogForwarder.pm b/lib/Object/Remote/Role/LogForwarder.pm index 1ff8e5f..ce5bbc2 100644 --- a/lib/Object/Remote/Role/LogForwarder.pm +++ b/lib/Object/Remote/Role/LogForwarder.pm @@ -4,14 +4,23 @@ use Moo::Role; has enable_forward => ( is => 'rw', default => sub { 1 } ); has _forward_destination => ( is => 'rw' ); +#lookup table for package names that should not +#be forwarded across Object::Remote connections has _forward_stop => ( is => 'ro', required => 1, default => sub { {} } ); after _deliver_message => sub { - my ($self, $level, $generator, $args, $metadata) = @_; - my $package = $metadata->{package}; +# my ($self, $level, $generator, $args, $metadata) = @_; + my ($self, %message_info) = @_; + my $package = $message_info{caller_package}; my $destination = $self->_forward_destination; our $reentrant; + if (defined $message_info{object_remote}) { + $message_info{object_remote} = { %{$message_info{object_remote}} }; + } + + $message_info{object_remote}->{forwarded} = 1; + return unless $self->enable_forward; return unless defined $destination; return if $self->_forward_stop->{$package}; @@ -20,10 +29,14 @@ after _deliver_message => sub { warn "log forwarding went reentrant. bottom: '$reentrant' top: '$package'"; return; } - + local $reentrant = $package; - - $destination->_deliver_message($level, $generator, $args, $metadata); + + eval { $destination->_deliver_message(%message_info) }; + + if ($@ && $@ !~ /^Attempt to use Object::Remote::Proxy backed by an invalid handle/) { + die $@; + } }; sub exclude_forwarding {