Skip to content

Commit 8061d4c

Browse files
committed
fix: Improve robustness of waitOpened during close
1 parent 5b5dde9 commit 8061d4c

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

peer/channel.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,6 @@ func (c *Channel) init() {
194194
//
195195
// This will block until the underlying DataChannel has been opened.
196196
func (c *Channel) Read(bytes []byte) (int, error) {
197-
if c.isClosed() {
198-
return 0, c.closeError
199-
}
200197
err := c.waitOpened()
201198
if err != nil {
202199
return 0, err
@@ -233,9 +230,6 @@ func (c *Channel) Write(bytes []byte) (n int, err error) {
233230
c.writeMutex.Lock()
234231
defer c.writeMutex.Unlock()
235232

236-
if c.isClosed() {
237-
return 0, c.closeWithError(nil)
238-
}
239233
err = c.waitOpened()
240234
if err != nil {
241235
return 0, err
@@ -313,7 +307,13 @@ func (c *Channel) isClosed() bool {
313307
func (c *Channel) waitOpened() error {
314308
select {
315309
case <-c.opened:
316-
return nil
310+
// Re-check to prioritize the closed channel.
311+
select {
312+
case <-c.closed:
313+
return c.closeError
314+
default:
315+
return nil
316+
}
317317
case <-c.closed:
318318
return c.closeError
319319
}

0 commit comments

Comments
 (0)