Leaks in SL::Template::Plugin::T8
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 24 Mar 2011 09:25:26 +0000 (10:25 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 24 Mar 2011 09:27:58 +0000 (10:27 +0100)
Filter werden in Template::Toolkit in einer anonymen Closure einfach im Kontext
verlinkt. Dadurch geht _jedes_ Filter Objekt verloren und leakt. Diese Änderung
cacht das T8 Filterobjekt, da es sowieso statisch ist. Das beschränkt die Leaks
auf einmal ~100 Byte.

SL/Template/Plugin/T8.pm

index 6c584d7..ca62e86 100644 (file)
@@ -1,14 +1,19 @@
 package SL::Template::Plugin::T8;
 
 use strict;
+use parent qw( Template::Plugin::Filter );
 
-use Template::Plugin::Filter;
-use base qw( Template::Plugin::Filter );
+my $cached_instance;
+
+sub new {
+  my ($class) = shift;
+
+  return $cached_instance ||= $class->SUPER::new(@_);
+}
 
 sub init {
   my $self = shift;
 
-  # first arg can specify filter name
   $self->install_filter($self->{ _ARGS }->[0] || 'T8');
 
   return $self;