Changeset 12582 for lang/perl/tiarra

Show
Ignore:
Timestamp:
05/28/08 04:30:37 (6 years ago)
Author:
topia
Message:

cleanup module_object related code.
* get rid of outside strong ref.
* do canonicalize objects on add.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/tiarra/branches/module-reload/main/ModuleManager.pm

    r12491 r12582  
    168168 
    169169    my ($foo); 
    170     push @{$this->{mod_disposables}->{$modname}}, 
    171         map { $foo = \$_; weaken($_); $foo } @disposables; 
     170    my (%addrs); 
     171    @{$this->{mod_disposables}->{$modname}} = grep { 
     172        defined $_ && !($addrs{refaddr($_)}++) 
     173    } (@{$this->{mod_disposables}->{$modname}}, 
     174       map { weaken($_); $_ } @disposables); 
    172175 
    173176    $this; 
     
    182185 
    183186    my $arr = $this->{mod_disposables}->{$modname}; 
    184     @$arr = grep { defined $$_ } @$arr; 
     187    @$arr = grep { defined $_ } @$arr; 
    185188 
    186189    my %targets = map { refaddr($_) => 1 } @disposables; 
    187     @$arr = grep { !$targets{refaddr($$_)} } @$arr; 
     190    @$arr = grep { !$targets{refaddr($_)} } @$arr; 
    188191 
    189192    if (!@$arr) { 
     
    203206    return unless $arr; 
    204207 
    205     foreach my $object (grep { defined $$_ } @$arr) { 
     208    foreach my $object (grep { defined $_ } @$arr) { 
    206209        eval { 
    207             $$object->module_destruct($module); 
     210            $object->module_destruct($module); 
    208211        }; if ($@) { 
    209212            $this->_runloop->notify_error($@);