diff options
Diffstat (limited to '')
-rw-r--r-- | courses.go | 10 | ||||
-rw-r--r-- | endpoint_ws.go | 6 | ||||
-rw-r--r-- | sethandler.go | 6 | ||||
-rw-r--r-- | ws_connection.go | 12 | ||||
-rw-r--r-- | wsmsg_choose.go | 10 |
5 files changed, 42 insertions, 2 deletions
@@ -23,6 +23,7 @@ package main import ( "context" "fmt" + "log/slog" "sync" "sync/atomic" @@ -140,7 +141,14 @@ func (course *courseT) decrementSelectedAndPropagate( defer course.SelectedLock.Unlock() atomic.AddUint32(&course.Selected, ^uint32(0)) }() - go propagateSelectedUpdate(course) + go func() { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() + propagateSelectedUpdate(course) + }() err := sendSelectedUpdate(ctx, conn, course.ID) if err != nil { return wrapError( diff --git a/endpoint_ws.go b/endpoint_ws.go index 83e539a..4ec31cb 100644 --- a/endpoint_ws.go +++ b/endpoint_ws.go @@ -33,6 +33,12 @@ import ( * handled in handleConn. */ func handleWs(w http.ResponseWriter, req *http.Request) { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() + wsOptions := &websocket.AcceptOptions{ Subprotocols: []string{"cca1"}, } //exhaustruct:ignore diff --git a/sethandler.go b/sethandler.go index d65dce1..9e35c65 100644 --- a/sethandler.go +++ b/sethandler.go @@ -27,6 +27,12 @@ import ( func setHandler(pattern string, handler func(http.ResponseWriter, *http.Request) (string, int, error)) { http.HandleFunc(pattern, func(w http.ResponseWriter, req *http.Request) { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() + msg, statusCode, err := handler(w, req) if err != nil { if statusCode == -1 || statusCode == 0 { diff --git a/ws_connection.go b/ws_connection.go index 2fe7fea..abe8425 100644 --- a/ws_connection.go +++ b/ws_connection.go @@ -24,6 +24,7 @@ import ( "context" "errors" "fmt" + "log/slog" "sync" "sync/atomic" "time" @@ -122,6 +123,12 @@ func handleConn( usemParent := make(chan int) for courseID, usem := range usems { go func() { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() + for { select { case <-newCtx.Done(): @@ -164,6 +171,11 @@ func handleConn( */ recv := make(chan *errbytesT) go func() { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() for { /* * Here we use the original connection context instead diff --git a/wsmsg_choose.go b/wsmsg_choose.go index 0705690..8a177db 100644 --- a/wsmsg_choose.go +++ b/wsmsg_choose.go @@ -24,6 +24,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strconv" "sync/atomic" "time" @@ -152,7 +153,14 @@ func messageChooseCourse( }() if ok { - go propagateSelectedUpdate(course) + go func() { + defer func() { + if e := recover(); e != nil { + slog.Error("panic", "arg", e) + } + }() + propagateSelectedUpdate(course) + }() err := tx.Commit(ctx) if err != nil { err := course.decrementSelectedAndPropagate(ctx, c) |