@@ -331,37 +331,39 @@ func (logger *BufferedLiveLogger) Close() error {
331331}
332332
333333func (logger * BufferedLiveLogger ) SendLog (wrapper * protocol.TimelineRecordFeedLinesWrapper ) error {
334- if data := logger .data .Load (); data != nil {
335- if data .IsZero () {
336- return errors .New ("buffered live logger is closed" )
337- }
338- select {
339- case <- data .logdrain :
340- return errors .New ("buffered live logger closing" )
341- case data .logchan <- wrapper :
342- }
343- } else {
344- logchan := make (chan * protocol.TimelineRecordFeedLinesWrapper , websocketPingSize )
345- logfinished := make (chan struct {})
346- ndata := internalBufferedLiveLoggerData {
347- logchan : logchan ,
348- logdrain : make (chan struct {}),
349- logfinished : logfinished ,
350- }
351- if logger .data .CompareAndSwap (data , & ndata ) {
334+ for {
335+ if data := logger .data .Load (); data != nil {
336+ if data .IsZero () {
337+ return errors .New ("buffered live logger is closed" )
338+ }
352339 select {
353- case <- ndata .logdrain :
340+ case <- data .logdrain :
354341 return errors .New ("buffered live logger closing" )
355- case ndata .logchan <- wrapper :
342+ case data .logchan <- wrapper :
343+ return nil
356344 }
357- go logger .sendLogs (logchan , ndata .logdrain , logfinished )
358345 } else {
359- close (ndata .logchan )
360- close (ndata .logfinished )
361- return logger .SendLog (wrapper )
346+ logchan := make (chan * protocol.TimelineRecordFeedLinesWrapper , websocketPingSize )
347+ logfinished := make (chan struct {})
348+ ndata := internalBufferedLiveLoggerData {
349+ logchan : logchan ,
350+ logdrain : make (chan struct {}),
351+ logfinished : logfinished ,
352+ }
353+ if logger .data .CompareAndSwap (data , & ndata ) {
354+ go logger .sendLogs (logchan , ndata .logdrain , logfinished )
355+ select {
356+ case <- ndata .logdrain :
357+ return errors .New ("buffered live logger closing" )
358+ case ndata .logchan <- wrapper :
359+ return nil
360+ }
361+ } else {
362+ close (ndata .logchan )
363+ close (ndata .logfinished )
364+ }
362365 }
363366 }
364- return nil
365367}
366368
367369type JobLogger struct {
0 commit comments