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=cad257257761787e7bd952ddc3bc3dd2b1607b4b;hb=54b64f99be532930bd97b0fd2418675302aa7a1e;hpb=5add5e29851e82862e4d8f6d67dfce559f6685ce diff --git a/lib/Object/Remote/Role/LogForwarder.pm b/lib/Object/Remote/Role/LogForwarder.pm index cad2572..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,11 +29,11 @@ after _deliver_message => sub { warn "log forwarding went reentrant. bottom: '$reentrant' top: '$package'"; return; } - + local $reentrant = $package; - - eval { $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 $@; }