@ -99,28 +99,42 @@ func (p *PostProcessorServer) PostProcess(streamId uint32, reply *PostProcessorP
if err != nil {
return NewBasicError ( err )
}
defer client . Close ( )
if p . context == nil {
p . context , p . contextCancel = context . WithCancel ( context . Background ( ) )
}
streamId = 0
artifactResult , keep , forceOverride , err := p . p . PostProcess ( p . context , client . Ui ( ) , client . Artifact ( ) )
if err == nil && artifactResult != nil {
streamId = p . mux . NextId ( )
server := newServerWithMux ( p . mux , streamId )
server . RegisterArtifact ( artifactResult )
go server . Serve ( )
}
artifact := client . Artifact ( )
artifactResult , keep , forceOverride , err := p . p . PostProcess ( p . context , client . Ui ( ) , artifact )
* reply = PostProcessorProcessResponse {
Err : NewBasicError ( err ) ,
Keep : keep ,
ForceOverride : forceOverride ,
StreamId : streamId ,
StreamId : 0 ,
}
if err != nil {
log . Printf ( "error: %v" , err )
client . Close ( )
return nil
}
if artifactResult != artifact {
// Sometimes, the artifact returned by PostProcess is the artifact from
// client.Artifact() and in that case we don't want to close client;
// otherwise the outcome is sort of undetermined. See [GH-9995] for a
// good test file.
defer client . Close ( )
}
if artifactResult != nil {
streamId = p . mux . NextId ( )
reply . StreamId = streamId
server := newServerWithMux ( p . mux , streamId )
if err := server . RegisterArtifact ( artifactResult ) ; err != nil {
return err
}
go server . Serve ( )
}
return nil
}