r274@brr: dpavlin | 2007-11-25 21:34:51 +0100
[perl-cwmp.git] / lib / CWMP / Request.pm
index 5ae478e..ef8c322 100644 (file)
@@ -8,6 +8,8 @@ use Data::Dump qw/dump/;
 use Carp qw/confess cluck/;
 use Class::Trigger;
 
+#use Devel::LeakTrace::Fast;
+
 =head1 NAME
 
 CWMP::Request - parse SOAP request metods
@@ -124,7 +126,14 @@ push @$rules,
 
 =cut
 
-my $parser = XML::Rules->new(
+sub parse {
+       my $self = shift;
+
+       my $xml = shift || confess "no xml?";
+
+       $state = {};
+
+       my $parser = XML::Rules->new(
 #              start_rules => [
 #                      '^division_name,fax' => 'skip',
 #              ],
@@ -136,22 +145,20 @@ my $parser = XML::Rules->new(
                        'urn:dslforum-org:cwmp-1-0' => '',
                },
                rules => $rules,
-);
+       );
 
-sub parse {
-       my $self = shift;
+#      warn "## created $parser\n";
 
-       my $xml = shift || confess "no xml?";
+       $parser->parsestring( $xml );
 
-       $state = {};
+       undef $parser;
 
-       $parser->parsestring( $xml );
        if ( my $trigger = $state->{_trigger} ) {
                warn "### call_trigger( $trigger )\n";
                $self->call_trigger( $trigger, $state );
        }
-       # XXX don't propagate _trigger (useful?)
-       delete( $state->{_trigger} );
+       # XXX propagate _trigger (useful for symlinks)
+
        return $state;
 }