From 0fb483d4937f6d244506fb4bf475458cea295beb Mon Sep 17 00:00:00 2001 From: Carl Kittelberger Date: Thu, 11 Jul 2019 14:50:57 +0200 Subject: [PATCH] Run parts of data channel closure depending on state. --- internal/data_channel.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/data_channel.go b/internal/data_channel.go index a095d5d..0eba444 100644 --- a/internal/data_channel.go +++ b/internal/data_channel.go @@ -53,14 +53,15 @@ func (conn *DataChannel) OnError(f func(error)) { func (conn *DataChannel) Close() { // already closed? - if conn.dataChannel.ReadyState() == webrtc.DataChannelStateClosing || - conn.dataChannel.ReadyState() == webrtc.DataChannelStateClosed { - return + if conn.dataChannel.ReadyState() != webrtc.DataChannelStateClosing && + conn.dataChannel.ReadyState() != webrtc.DataChannelStateClosed { + conn.AbortRawDataTransmission(io.EOF) + conn.dataChannel.Close() } - conn.AbortRawDataTransmission(io.EOF) - conn.dataChannel.Close() - <-conn.closeWaitChannel + if conn.dataChannel.ReadyState() != webrtc.DataChannelStateClosed { + <-conn.closeWaitChannel + } } func (conn *DataChannel) triggerOpen() {