diff --git a/app/api/controller/gitspace/logs_stream.go b/app/api/controller/gitspace/logs_stream.go index 0f73d3d6a..7483506e2 100644 --- a/app/api/controller/gitspace/logs_stream.go +++ b/app/api/controller/gitspace/logs_stream.go @@ -58,6 +58,8 @@ func (c *Controller) LogsStream( go func() { defer close(evenc) + defer close(errch) + for { select { case <-ctx.Done(): diff --git a/app/gitspace/orchestrator/container/embedded_docker.go b/app/gitspace/orchestrator/container/embedded_docker.go index ce0970090..b577252ae 100644 --- a/app/gitspace/orchestrator/container/embedded_docker.go +++ b/app/gitspace/orchestrator/container/embedded_docker.go @@ -175,7 +175,7 @@ func (e *EmbeddedDockerOrchestrator) StartGitspace( usedPorts = ports // TODO: Add gitspace status reporting. - log.Debug().Msg("started gitspace") + log.Debug().Msgf("started gitspace: %s", gitspaceConfig.Identifier) default: return nil, fmt.Errorf("gitspace %s is in a bad state: %s", containerName, state) diff --git a/livelog/stream.go b/livelog/stream.go index 3debc61a1..d3ee3200a 100644 --- a/livelog/stream.go +++ b/livelog/stream.go @@ -42,7 +42,9 @@ func (s *stream) write(line *Line) error { s.Lock() s.hist = append(s.hist, line) for l := range s.list { - l.publish(line) + if !l.closed { + l.publish(line) + } } // the history should not be unbounded. The history // slice is capped and items are removed in a FIFO diff --git a/livelog/sub.go b/livelog/sub.go index 1e4709159..11e5ddeb1 100644 --- a/livelog/sub.go +++ b/livelog/sub.go @@ -16,6 +16,8 @@ package livelog import ( "sync" + + "github.com/rs/zerolog/log" ) type subscriber struct { @@ -27,6 +29,16 @@ type subscriber struct { } func (s *subscriber) publish(line *Line) { + defer func() { + r := recover() + if r != nil { + log.Debug().Msgf("publishing to closed subscriber") + } + }() + + s.Lock() + defer s.Unlock() + select { case <-s.closec: case s.handler <- line: