On Tue, Jun 03, 2003 at 07:24:04PM -0400, Benjamin Goldberg wrote:
> IIRC, DoD normally happens something vaguely like this:
> 
>    for my $p (@all_pmcs) {
>       clear_is_live_flag($p);
>    }
>    our $traverse;
>    sub set_is_live_flag($p) {
>       if( !test_is_live_flag($p) and test_is_agregate($p) ) {
>          $traverse = [$p, $traverse];
>       }
>       really_set_is_live_flag($p);
>    }
>    set_is_live_flag($_) for @rootset;
>    while( $traverse ) {
>       ((my $p), $traverse) = splice @$traverse;
>       $p->set_live_flag_on_contained_objects();
>    }
>    for my $p (@all_pmcs) {
>       next if test_is_live_flag($p);
>       free_pmc($p);
>    }

This is something that has concerned me for a while. But does DoD
ensure any kind of ordering for the destruction ?

I ask becasue what happens if an object actually wants
to use its contents during its DESTROY ?

For example Net::POP3::DESTROY will send a reset command to its
server if the user did not call the quit method first. But how
could it do this if the socket PMC was already freed ?

Graham.

Reply via email to