r274@brr: dpavlin | 2007-11-25 21:34:51 +0100
[perl-cwmp.git] / lib / CWMP / Request.pm
index d4817b0..ef8c322 100644 (file)
@@ -4,11 +4,12 @@ use warnings;
 use strict;
 
 use XML::Rules;
-use CWMP::Tree;
 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
@@ -21,7 +22,7 @@ All methods described below call triggers with same name
 
 our $state;    # FIXME check this!
 
-my $rules =  [
+our $rules =  [
                #_default => 'content trim',
                x_default => sub {
                        my ($tag_name, $tag_hash, $context, $parent_data) = @_;
@@ -130,6 +131,8 @@ sub parse {
 
        my $xml = shift || confess "no xml?";
 
+       $state = {};
+
        my $parser = XML::Rules->new(
 #              start_rules => [
 #                      '^division_name,fax' => 'skip',
@@ -144,15 +147,18 @@ sub parse {
                rules => $rules,
        );
 
-       $state = {};
+#      warn "## created $parser\n";
 
        $parser->parsestring( $xml );
+
+       undef $parser;
+
        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;
 }