Skip to content

Commit 24ed421

Browse files
attempt to break deadlock
1 parent 50ba8c0 commit 24ed421

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

graphql/websocket.go

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,28 +130,41 @@ func (w *webSocketClient) listenWebSocket() {
130130
}
131131
}
132132

133-
func (w *webSocketClient) forwardWebSocketData(message []byte) error {
134-
var wsMsg webSocketReceiveMessage
135-
err := json.Unmarshal(message, &wsMsg)
136-
if err != nil {
137-
return err
138-
}
139-
if wsMsg.ID == "" { // e.g. keep-alive messages
140-
return nil
141-
}
133+
func (w *webSocketClient) getSubAndHandleCompletion(wsMsg webSocketReceiveMessage) (*subscription, error) {
142134
w.subscriptions.Lock()
143135
defer w.subscriptions.Unlock()
144136
sub, success := w.subscriptions.map_[wsMsg.ID]
145137
if !success {
146-
return fmt.Errorf("received message for unknown subscription ID '%s'", wsMsg.ID)
138+
return nil, fmt.Errorf("received message for unknown subscription ID '%s'", wsMsg.ID)
147139
}
148140
if sub.hasBeenUnsubscribed {
149-
return nil
141+
return nil, nil
150142
}
151143
if wsMsg.Type == webSocketTypeComplete {
152144
sub.hasBeenUnsubscribed = true
153145
w.subscriptions.map_[wsMsg.ID] = sub
154146
reflect.ValueOf(sub.interfaceChan).Close()
147+
return nil, nil
148+
}
149+
150+
return &sub, nil
151+
}
152+
153+
func (w *webSocketClient) forwardWebSocketData(message []byte) error {
154+
var wsMsg webSocketReceiveMessage
155+
err := json.Unmarshal(message, &wsMsg)
156+
if err != nil {
157+
return err
158+
}
159+
if wsMsg.ID == "" { // e.g. keep-alive messages
160+
return nil
161+
}
162+
163+
sub, err := w.getSubAndHandleCompletion(wsMsg)
164+
if err != nil {
165+
return err
166+
}
167+
if sub == nil {
155168
return nil
156169
}
157170

0 commit comments

Comments
 (0)