diff --git a/gitea-ci/log.go b/gitea-ci/log.go index ae9d478..684f1f2 100644 --- a/gitea-ci/log.go +++ b/gitea-ci/log.go @@ -27,7 +27,7 @@ func (l logWebsocket) ServeHTTP(w http.ResponseWriter, r *http.Request) { } defer c.Close(websocket.StatusInternalError, "the sky is falling") - ch := make(chan *[]byte) + ch := make(chan *[]byte, 1000) err = run.addWriter(conn{ch: ch}) if err != nil { log.Println("addWriter", err) @@ -38,7 +38,10 @@ func (l logWebsocket) ServeHTTP(w http.ResponseWriter, r *http.Request) { if payload == nil { break } else { - c.Write(context.Background(), websocket.MessageBinary, *payload) + err = c.Write(context.Background(), websocket.MessageBinary, *payload) + if err != nil { + return + } } } c.Close(websocket.StatusNormalClosure, "") diff --git a/gitea-ci/webhook.go b/gitea-ci/webhook.go index 0dde14c..0c4ea9b 100644 --- a/gitea-ci/webhook.go +++ b/gitea-ci/webhook.go @@ -23,6 +23,7 @@ import ( type run struct { mutex sync.Mutex + finished bool previous []byte writers []io.WriteCloser } @@ -45,13 +46,18 @@ func (r *run) addWriter(w io.WriteCloser) (err error) { r.mutex.Lock() defer r.mutex.Unlock() - go w.Write(slices.Clone(r.previous)) - r.writers = append(r.writers, w) + w.Write(slices.Clone(r.previous)) + if r.finished { + w.Close() + } else { + r.writers = append(r.writers, w) + } return } func (r *run) finishRun() { r.mutex.Lock() defer r.mutex.Unlock() + r.finished = true for _, c := range r.writers { c.Close() }