Protect subrequests from post-complete messages
authorMike Rylander <mrylander@gmail.com>
Thu, 16 May 2013 14:17:15 +0000 (10:17 -0400)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 16 Dec 2013 16:11:44 +0000 (08:11 -0800)
Subrequests (AKA method_lookup()-based API calls) sometimes append
final-lvalue responses to the response list even after respond_complete()
has been called from within the implementation method.  This commit
discards all post-respond_complete values, protecting against extra,
spurious values being returned to the ultimate client.

Signed-off-by: Mike Rylander <mrylander@gmail.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

src/perl/lib/OpenSRF/AppSession.pm

index 8b99c00..9e371c7 100644 (file)
@@ -1098,15 +1098,22 @@ package OpenSRF::AppSubrequest;
 
 sub respond {
        my $self = shift;
+       return if $self->complete;
+
        my $resp = shift;
        push @{$$self{resp}}, $resp if (defined $resp);
 }
-sub respond_complete { respond(@_); }
+
+sub respond_complete {
+       my $self = shift;
+       $self->respond(@_);
+       $self->complete(1);
+}
 
 sub new {
        my $class = shift;
        $class = ref($class) || $class;
-       return bless({resp => [], @_}, $class);
+       return bless({complete => 0, resp => [], @_}, $class);
 }
 
 sub responses { @{$_[0]->{resp}} }
@@ -1118,6 +1125,13 @@ sub session {
        return $x->{session};
 }
 
+sub complete {
+       my $x = shift;
+       my $c = shift;
+       $x->{complete} = $c if ($c);
+       return $x->{complete};
+}
+
 sub status {}