Skip to content

Commit d9be90c

Browse files
subscription: add panic handling
1 parent fe28f34 commit d9be90c

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

internal/exec/subscribe.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type Response struct {
2121
Errors []*errors.QueryError
2222
}
2323

24-
func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query.Operation) <-chan *Response {
24+
func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query.Operation) (respChan <-chan *Response) {
2525
var result reflect.Value
2626
var err *errors.QueryError
2727
sels := selected.ApplyOperation(&r.Request, s, op)
@@ -31,6 +31,18 @@ func (r *Request) Subscribe(ctx context.Context, s *resolvable.Schema, op *query
3131
return sendAndReturnClosed(&Response{Errors: []*errors.QueryError{err}})
3232
}
3333

34+
defer func() {
35+
if panicValue := recover(); panicValue != nil {
36+
r.Logger.LogPanic(ctx, panicValue)
37+
if errs, ok := panicValue.(*errors.QueryError); ok {
38+
err = errs
39+
} else {
40+
err = makePanicError(panicValue)
41+
}
42+
respChan = sendAndReturnClosed(&Response{Errors: []*errors.QueryError{err}})
43+
}
44+
}()
45+
3446
var in []reflect.Value
3547
if f.field.HasContext {
3648
in = append(in, reflect.ValueOf(ctx))

0 commit comments

Comments
 (0)