Fix goroutine leak when reading the client WebSocket
This commit is contained in:
@ -61,14 +61,20 @@ func newCodeOceanToRawReader(connection webSocketConnection) *codeOceanToRawRead
|
|||||||
// CloseHandler.
|
// CloseHandler.
|
||||||
func (cr *codeOceanToRawReader) readInputLoop(ctx context.Context) {
|
func (cr *codeOceanToRawReader) readInputLoop(ctx context.Context) {
|
||||||
readMessage := make(chan bool)
|
readMessage := make(chan bool)
|
||||||
for {
|
readingContext, cancel := context.WithCancel(ctx)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
for ctx.Err() == nil {
|
||||||
var messageType int
|
var messageType int
|
||||||
var reader io.Reader
|
var reader io.Reader
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
messageType, reader, err = cr.connection.NextReader()
|
messageType, reader, err = cr.connection.NextReader()
|
||||||
readMessage <- true
|
select {
|
||||||
|
case <-readingContext.Done():
|
||||||
|
case readMessage <- true:
|
||||||
|
}
|
||||||
}()
|
}()
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
|
Reference in New Issue
Block a user