aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--courses.go10
-rw-r--r--endpoint_ws.go6
-rw-r--r--sethandler.go6
-rw-r--r--ws_connection.go12
-rw-r--r--wsmsg_choose.go10
5 files changed, 42 insertions, 2 deletions
diff --git a/courses.go b/courses.go
index 781f69a..fb0161d 100644
--- a/courses.go
+++ b/courses.go
@@ -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)