]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
http: cast a wider net to prevent circular references
authorEric Wong <e@80x24.org>
Wed, 18 Jan 2017 07:35:35 +0000 (07:35 +0000)
committerEric Wong <e@80x24.org>
Wed, 18 Jan 2017 07:35:35 +0000 (07:35 +0000)
We can more effectly nuke circular references by clearing
the entire PSGI $env, not just particular keys, when
there are self-referential fields such as "qspawn.response"
in our environment.

lib/PublicInbox/HTTP.pm

index 3530f8ba33d45c3c61534e19a0073bf12b4d80b3..8ba41ba5fbea4285b5de6dccb1a3db8cf6efb5cc 100644 (file)
@@ -241,6 +241,7 @@ sub response_done_cb ($$) {
        sub {
                my $env = $self->{env};
                $self->{env} = undef;
+               %$env = () if $env; # prevent circular references
                $self->write("0\r\n\r\n") if $alive == 2;
                $self->write(sub{$alive ? next_request($self) : $self->close});
        }
@@ -472,7 +473,7 @@ sub close {
        my $self = shift;
        my $forward = $self->{forward};
        my $env = $self->{env};
-       delete $env->{'psgix.io'} if $env; # prevent circular references
+       %$env = () if $env; # prevent circular references
        $self->{pull} = $self->{forward} = $self->{env} = undef;
        if ($forward) {
                eval { $forward->close };