Skip to content

Commit 04d0a38

Browse files
authored
Merge pull request #82 from cloudstruct/fix/protocol-exit-loops-on-error
fix: exit send/recv loops in Protocol on error
2 parents c56bf6c + 295937c commit 04d0a38

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

protocol/protocol.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ func (p *Protocol) sendLoop() {
131131
newState, err = p.getNewState(msg)
132132
if err != nil {
133133
p.SendError(fmt.Errorf("%s: error sending message: %s", p.config.Name, err))
134+
return
134135
}
135136
setNewState = true
136137
// If there are no queued messages, set the new state now
@@ -159,13 +160,15 @@ func (p *Protocol) sendLoop() {
159160
data, err = utils.CborEncode(msg)
160161
if err != nil {
161162
p.SendError(err)
163+
return
162164
}
163165
}
164166
payloadBuf.Write(data)
165167
if !setNewState {
166168
newState, err = p.getNewState(msg)
167169
if err != nil {
168170
p.SendError(fmt.Errorf("%s: error sending message: %s", p.config.Name, err))
171+
return
169172
}
170173
setNewState = true
171174
}
@@ -247,21 +250,25 @@ func (p *Protocol) recvLoop() {
247250
p.recvReadyChan <- true
248251
continue
249252
}
250-
p.config.ErrorChan <- fmt.Errorf("%s: decode error: %s", p.config.Name, err)
253+
p.SendError(fmt.Errorf("%s: decode error: %s", p.config.Name, err))
254+
return
251255
}
252256
// Create Message object from CBOR
253257
msgType := uint(tmpMsg[0].(uint64))
254258
msgData := p.recvBuffer.Bytes()[:numBytesRead]
255259
msg, err := p.config.MessageFromCborFunc(msgType, msgData)
256260
if err != nil {
257-
p.config.ErrorChan <- err
261+
p.SendError(err)
262+
return
258263
}
259264
if msg == nil {
260-
p.config.ErrorChan <- fmt.Errorf("%s: received unknown message type: %#v", p.config.Name, tmpMsg)
265+
p.SendError(fmt.Errorf("%s: received unknown message type: %#v", p.config.Name, tmpMsg))
266+
return
261267
}
262268
// Handle message
263269
if err := p.handleMessage(msg, isResponse); err != nil {
264-
p.config.ErrorChan <- err
270+
p.SendError(err)
271+
return
265272
}
266273
if numBytesRead < p.recvBuffer.Len() {
267274
// There is another message in the same muxer segment, so we reset the buffer with just

0 commit comments

Comments
 (0)