X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=perl%2Flib%2FIDZebra%2FFilter.pm;h=29e763567eefcb85600e8ac245684dd9d9fbd652;hb=4003296c8a5cf45925cf18f2d6feef929ead1f66;hp=51adcc0604954151a5df6b66c7034ca98a60a8e8;hpb=1b62315f3ba83b91a8580f72943124ba9cb09249;p=idzebra-moved-to-github.git diff --git a/perl/lib/IDZebra/Filter.pm b/perl/lib/IDZebra/Filter.pm index 51adcc0..29e7635 100644 --- a/perl/lib/IDZebra/Filter.pm +++ b/perl/lib/IDZebra/Filter.pm @@ -8,6 +8,10 @@ use Carp; package IDZebra::Filter; use IDZebra; use IDZebra::Data1; +use IDZebra::Logger qw(:flags :calls); +use Devel::Leak; + +our $SAFE_MODE = 1; BEGIN { IDZebra::init(); # ??? Do we need that at all (this is jus nmem init...) @@ -31,13 +35,28 @@ sub new { # ----------------------------------------------------------------------------- sub _process { my ($self) = @_; + +# if ($self->{dl}) { +# print STDERR "LEAK",Devel::Leak::CheckSV($self->{dl}),"\n"; +# } + +# print STDERR "LEAK",Devel::Leak::NoteSV($self->{dl}),"\n"; + # This is ugly... could be passed as parameters... but didn't work. # I don't know why... my $dh = IDZebra::grs_perl_get_dh($self->{context}); my $mem = IDZebra::grs_perl_get_mem($self->{context}); my $d1 = IDZebra::Data1->get($dh,$mem); - my $rootnode = $self->process($d1); + my $rootnode; + if ($SAFE_MODE) { + eval {$rootnode = $self->process($d1)}; + if ($@) { + logf(LOG_WARN,"Error processing perl filter:%s\n",$@); + } + } else { + $rootnode = $self->process($d1); + } IDZebra::grs_perl_set_res($self->{context},$rootnode); return (0); }