@@ -911,7 +911,7 @@ func (a *agent) runScript(ctx context.Context, lifecycle, script string) (err er
911
911
return nil
912
912
}
913
913
914
- func (a * agent ) trackScriptLogs (ctx context.Context , reader io.Reader ) (chan struct {}, error ) {
914
+ func (a * agent ) trackScriptLogs (ctx context.Context , reader io.ReadCloser ) (chan struct {}, error ) {
915
915
// Synchronous sender, there can only be one outbound send at a time.
916
916
//
917
917
// It's important that we either flush or drop all logs before returning
@@ -923,17 +923,25 @@ func (a *agent) trackScriptLogs(ctx context.Context, reader io.Reader) (chan str
923
923
flush := time .NewTimer (flushTimeout )
924
924
flush .Stop ()
925
925
926
+ var backlog []agentsdk.StartupLog
926
927
defer func () {
927
928
flush .Stop ()
929
+ _ = reader .Close () // Ensure read routine is closed.
930
+ if len (backlog ) > 0 {
931
+ a .logger .Debug (ctx , "track script logs sender exiting, discarding logs" , slog .F ("discarded_logs_count" , len (backlog )))
932
+ }
928
933
a .logger .Debug (ctx , "track script logs sender exited" )
929
934
close (sendDone )
930
935
}()
931
936
932
- var backlog []agentsdk.StartupLog
933
937
done := false
934
938
for {
935
939
flushed := false
936
940
select {
941
+ case <- ctx .Done ():
942
+ return
943
+ case <- a .closed :
944
+ return
937
945
// Close (!ok) can be triggered by the reader closing due to
938
946
// EOF or due to agent closing, when this happens we attempt
939
947
// a final flush. If the context is canceled this will be a
@@ -1026,7 +1034,8 @@ func (a *agent) trackScriptLogs(ctx context.Context, reader io.Reader) (chan str
1026
1034
if err != nil {
1027
1035
close (send )
1028
1036
<- sendDone
1029
- return nil , err
1037
+ close (logsDone )
1038
+ return logsDone , err
1030
1039
}
1031
1040
1032
1041
return logsDone , nil
0 commit comments