From 408b4aff46c3016e091d1d371436a555c35fbb57 Mon Sep 17 00:00:00 2001 From: Dan Gottlieb Date: Thu, 8 Aug 2024 08:56:37 -0400 Subject: [PATCH] RSDK-8436: Take a swing at fixing peerconnection close problems. (#317) Co-authored-by: Benjamin Rewis <32186188+benjirewis@users.noreply.github.com> --- go.mod | 23 +++++++------- go.sum | 53 +++++++++++++++------------------ rpc/wrtc_base_channel.go | 7 +++-- rpc/wrtc_client.go | 2 +- rpc/wrtc_client_channel_test.go | 2 +- rpc/wrtc_client_test.go | 4 +-- rpc/wrtc_peer.go | 4 +-- rpc/wrtc_peer_test.go | 4 +-- rpc/wrtc_server.go | 6 ++-- rpc/wrtc_signaling_answerer.go | 2 +- 10 files changed, 52 insertions(+), 55 deletions(-) diff --git a/go.mod b/go.mod index 9adaee90..33848878 100644 --- a/go.mod +++ b/go.mod @@ -29,15 +29,15 @@ require ( github.com/jacobsa/go-serial v0.0.0-20180131005756-15cf729a72d4 github.com/lestrrat-go/jwx v1.2.25 github.com/mitchellh/mapstructure v1.5.0 - github.com/pion/dtls/v2 v2.2.7 - github.com/pion/ice/v2 v2.3.27 - github.com/pion/interceptor v0.1.25 + github.com/pion/dtls/v2 v2.2.12 + github.com/pion/ice/v2 v2.3.34 + github.com/pion/interceptor v0.1.29 github.com/pion/logging v0.2.2 - github.com/pion/sctp v1.8.16 + github.com/pion/sctp v1.8.19 github.com/pkg/errors v0.9.1 github.com/pseudomuto/protoc-gen-doc v1.3.2 github.com/rs/cors v1.8.3 - github.com/viamrobotics/webrtc/v3 v3.99.2 + github.com/viamrobotics/webrtc/v3 v3.99.5 github.com/zitadel/oidc v1.13.2 go.mongodb.org/mongo-driver v1.11.6 go.opencensus.io v0.24.0 @@ -207,16 +207,16 @@ require ( github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.5 // indirect - github.com/pion/datachannel v1.5.5 // indirect + github.com/pion/datachannel v1.5.8 // indirect github.com/pion/mdns v0.0.12 // indirect github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.12 // indirect - github.com/pion/rtp v1.8.5 // indirect + github.com/pion/rtcp v1.2.14 // indirect + github.com/pion/rtp v1.8.7 // indirect github.com/pion/sdp/v3 v3.0.9 // indirect - github.com/pion/srtp/v2 v2.0.18 // indirect + github.com/pion/srtp/v2 v2.0.20 // indirect github.com/pion/stun v0.6.1 // indirect - github.com/pion/transport/v2 v2.2.4 // indirect - github.com/pion/turn/v2 v2.1.3 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/turn/v2 v2.1.6 // indirect github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect github.com/pkg/profile v1.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -267,6 +267,7 @@ require ( github.com/ultraware/funlen v0.0.3 // indirect github.com/ultraware/whitespace v0.0.5 // indirect github.com/uudashr/gocognit v1.0.6 // indirect + github.com/wlynxg/anet v0.0.3 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.1 // indirect github.com/xdg-go/stringprep v1.0.3 // indirect diff --git a/go.sum b/go.sum index 32e794be..f0dc7f9e 100644 --- a/go.sum +++ b/go.sum @@ -980,47 +980,45 @@ github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwb github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= -github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= -github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= +github.com/pion/datachannel v1.5.8 h1:ph1P1NsGkazkjrvyMfhRBUAWMxugJjq2HfQifaOoSNo= +github.com/pion/datachannel v1.5.8/go.mod h1:PgmdpoaNBLX9HNzNClmdki4DYW5JtI7Yibu8QzbL3tI= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/ice/v2 v2.3.27 h1:FF2O+hKUymskFTeyDvh+XwsNu5KBVhfihv6mtrMb8HQ= -github.com/pion/ice/v2 v2.3.27/go.mod h1:KXJJcZK7E8WzrBEYnV4UtqEZsGeWfHxsNqhVcVvgjxw= -github.com/pion/interceptor v0.1.25 h1:pwY9r7P6ToQ3+IF0bajN0xmk/fNw/suTgaTdlwTDmhc= -github.com/pion/interceptor v0.1.25/go.mod h1:wkbPYAak5zKsfpVDYMtEfWEy8D4zL+rpxCxPImLOg3Y= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/ice/v2 v2.3.34 h1:Ic1ppYCj4tUOcPAp76U6F3fVrlSw8A9JtRXLqw6BbUM= +github.com/pion/ice/v2 v2.3.34/go.mod h1:mBF7lnigdqgtB+YHkaY/Y6s6tsyRyo4u4rPGRuOjUBQ= +github.com/pion/interceptor v0.1.29 h1:39fsnlP1U8gw2JzOFWdfCU82vHvhW9o0rZnZF56wF+M= +github.com/pion/interceptor v0.1.29/go.mod h1:ri+LGNjRUc5xUNtDEPzfdkmSqISixVTBF/z/Zms/6T4= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= github.com/pion/mdns v0.0.12 h1:CiMYlY+O0azojWDmxdNr7ADGrnZ+V6Ilfner+6mSVK8= github.com/pion/mdns v0.0.12/go.mod h1:VExJjv8to/6Wqm1FXK+Ii/Z9tsVk/F5sD/N70cnYFbk= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I= -github.com/pion/rtcp v1.2.12 h1:bKWiX93XKgDZENEXCijvHRU/wRifm6JV5DGcH6twtSM= github.com/pion/rtcp v1.2.12/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= -github.com/pion/rtp v1.8.2/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= +github.com/pion/rtcp v1.2.14 h1:KCkGV3vJ+4DAJmvP0vaQShsb0xkRfWkO540Gy102KyE= +github.com/pion/rtcp v1.2.14/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/rtp v1.8.5 h1:uYzINfaK+9yWs7r537z/Rc1SvT8ILjBcmDOpJcTB+OU= -github.com/pion/rtp v1.8.5/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= -github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= -github.com/pion/sctp v1.8.16 h1:PKrMs+o9EMLRvFfXq59WFsC+V8mN1wnKzqrv+3D/gYY= -github.com/pion/sctp v1.8.16/go.mod h1:P6PbDVA++OJMrVNg2AL3XtYHV4uD6dvfyOovCgMs0PE= +github.com/pion/rtp v1.8.7 h1:qslKkG8qxvQ7hqaxkmL7Pl0XcUm+/Er7nMnu6Vq+ZxM= +github.com/pion/rtp v1.8.7/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= +github.com/pion/sctp v1.8.19 h1:2CYuw+SQ5vkQ9t0HdOPccsCz1GQMDuVy5PglLgKVBW8= +github.com/pion/sctp v1.8.19/go.mod h1:P6PbDVA++OJMrVNg2AL3XtYHV4uD6dvfyOovCgMs0PE= github.com/pion/sdp/v3 v3.0.9 h1:pX++dCHoHUwq43kuwf3PyJfHlwIj4hXA7Vrifiq0IJY= github.com/pion/sdp/v3 v3.0.9/go.mod h1:B5xmvENq5IXJimIO4zfp6LAe1fD9N+kFv+V/1lOdz8M= -github.com/pion/srtp/v2 v2.0.18 h1:vKpAXfawO9RtTRKZJbG4y0v1b11NZxQnxRl85kGuUlo= -github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= +github.com/pion/srtp/v2 v2.0.20 h1:HNNny4s+OUmG280ETrCdgFndp4ufx3/uy85EawYEhTk= +github.com/pion/srtp/v2 v2.0.20/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40= -github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v2 v2.2.2/go.mod h1:OJg3ojoBJopjEeECq2yJdXH9YVrUJ1uQ++NjXLOUorc= github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v2 v2.2.4 h1:41JJK6DZQYSeVLxILA2+F4ZkKb4Xd/tFJZRFZQ9QAlo= github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/transport/v3 v3.0.2 h1:r+40RJR25S9w3jbA6/5uEPTzcdn7ncyU44RWCbHkLg4= -github.com/pion/turn/v2 v2.1.3 h1:pYxTVWG2gpC97opdRc5IGsQ1lJ9O/IlNhkzj7MMrGAA= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= +github.com/pion/turn/v2 v2.1.6 h1:Xr2niVsiPTB0FPtt+yAWKFUkU1eotQbGgpTIld4x1Gc= +github.com/pion/turn/v2 v2.1.6/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1285,9 +1283,11 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC github.com/valyala/fasthttp v1.16.0/go.mod h1:YOKImeEosDdBPnxc0gy7INqi3m1zK6A+xl6TwOBhHCA= github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD5KW4lOuSdPKzY= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/viamrobotics/webrtc/v3 v3.99.2 h1:twzAI3iBpGWG0WQVKVKeH3HujmXXg/71PTcWE8PjTts= -github.com/viamrobotics/webrtc/v3 v3.99.2/go.mod h1:rzQlHm355g01FiYdgQ+4cc/1YtZH2cbmSn+oiOGUt/4= +github.com/viamrobotics/webrtc/v3 v3.99.5 h1:w9fWNz3LN8rIbzB/UAWvKdZc4J5xNNsljRGi5mRTVAg= +github.com/viamrobotics/webrtc/v3 v3.99.5/go.mod h1:+/JSv+CQbnsqyWa2ZOEdgUfnRWlpdglWUoBc+qPPd5E= github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= +github.com/wlynxg/anet v0.0.3 h1:PvR53psxFXstc12jelG6f1Lv4MWqE0tI76/hHGjh9rg= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= @@ -1391,7 +1391,6 @@ golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= @@ -1514,7 +1513,6 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= @@ -1664,7 +1662,6 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= @@ -1680,7 +1677,6 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= @@ -1699,7 +1695,6 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= diff --git a/rpc/wrtc_base_channel.go b/rpc/wrtc_base_channel.go index c7cc7fe0..66647593 100644 --- a/rpc/wrtc_base_channel.go +++ b/rpc/wrtc_base_channel.go @@ -108,8 +108,9 @@ func newBaseChannel( // the `PeerConnection`. // // We chose here to call close for all cases of `Disconnected`, `Failed` and - // `Closed`. We rely on pion's `PeerConnection.Close` method being idempotent. - if err := peerConn.Close(); err != nil { + // `Closed`. We rely on pion's `PeerConnection.GracefulClose` method being idempotent. + // We "gracefully" close to wait for the read loop to complete. + if err := peerConn.GracefulClose(); err != nil { logger.Debugw("Error closing peer connection", "conn_id", currConnID, "conn_state", connectionState.String(), @@ -165,7 +166,7 @@ func (ch *webrtcBaseChannel) closeWithReason(err error) error { // Underlying connection may already be closed; ignore "conn is closed" // errors. - if err := ch.peerConn.Close(); !errors.Is(err, dtls.ErrConnClosed) { + if err := ch.peerConn.GracefulClose(); !errors.Is(err, dtls.ErrConnClosed) { return err } return nil diff --git a/rpc/wrtc_client.go b/rpc/wrtc_client.go index ea07b725..1bb3fde9 100644 --- a/rpc/wrtc_client.go +++ b/rpc/wrtc_client.go @@ -150,7 +150,7 @@ func dialWebRTC( var successful bool defer func() { if !successful { - err = multierr.Combine(err, peerConn.Close()) + err = multierr.Combine(err, peerConn.GracefulClose()) } }() diff --git a/rpc/wrtc_client_channel_test.go b/rpc/wrtc_client_channel_test.go index e488979e..9ac98eaa 100644 --- a/rpc/wrtc_client_channel_test.go +++ b/rpc/wrtc_client_channel_test.go @@ -584,7 +584,7 @@ func TestWebRTCClientChannelCanStopStreamRecvMsg(t *testing.T) { // Close client peer connection before receiving a client message. Assert // that RecvMsg does not hang. - test.That(t, pc1.Close(), test.ShouldBeNil) + test.That(t, pc1.GracefulClose(), test.ShouldBeNil) var respStatus pbstatus.Status err = clientStream.RecvMsg(&respStatus) test.That(t, err, test.ShouldNotBeNil) diff --git a/rpc/wrtc_client_test.go b/rpc/wrtc_client_test.go index ac16212a..13c7ec62 100644 --- a/rpc/wrtc_client_test.go +++ b/rpc/wrtc_client_test.go @@ -504,14 +504,14 @@ func testWebRTCClientAnswerConcurrent(t *testing.T, signalingCallQueue WebRTCCal pc1, _, err := newPeerConnectionForClient(context.Background(), webrtc.Configuration{}, true, logger) test.That(t, err, test.ShouldBeNil) - defer pc1.Close() + defer pc1.GracefulClose() encodedSDP1, err := EncodeSDP(pc1.LocalDescription()) test.That(t, err, test.ShouldBeNil) pc2, _, err := newPeerConnectionForClient(context.Background(), webrtc.Configuration{}, true, logger) test.That(t, err, test.ShouldBeNil) - defer pc2.Close() + defer pc2.GracefulClose() encodedSDP2, err := EncodeSDP(pc2.LocalDescription()) test.That(t, err, test.ShouldBeNil) diff --git a/rpc/wrtc_peer.go b/rpc/wrtc_peer.go index 14f518d5..ba7be127 100644 --- a/rpc/wrtc_peer.go +++ b/rpc/wrtc_peer.go @@ -91,7 +91,7 @@ func newPeerConnectionForClient( var successful bool defer func() { if !successful { - err = multierr.Combine(err, peerConn.Close()) + err = multierr.Combine(err, peerConn.GracefulClose()) } }() @@ -163,7 +163,7 @@ func newPeerConnectionForServer( var successful bool defer func() { if !successful { - err = multierr.Combine(err, peerConn.Close()) + err = multierr.Combine(err, peerConn.GracefulClose()) } }() diff --git a/rpc/wrtc_peer_test.go b/rpc/wrtc_peer_test.go index 1a620fbd..44364c32 100644 --- a/rpc/wrtc_peer_test.go +++ b/rpc/wrtc_peer_test.go @@ -53,14 +53,14 @@ func TestRenegotation(t *testing.T) { client, err := webrtc.NewPeerConnection(webrtc.Configuration{}) test.That(t, err, test.ShouldBeNil) defer func() { - client.Close() + client.GracefulClose() <-clientNegChannelClosed }() server, err := webrtc.NewPeerConnection(webrtc.Configuration{}) test.That(t, err, test.ShouldBeNil) defer func() { - server.Close() + server.GracefulClose() <-serverNegChannelClosed }() diff --git a/rpc/wrtc_server.go b/rpc/wrtc_server.go index 408b2228..8c35c7ac 100644 --- a/rpc/wrtc_server.go +++ b/rpc/wrtc_server.go @@ -102,7 +102,7 @@ func (srv *webrtcServer) Stop() { srv.peerConnsMu.Lock() defer srv.peerConnsMu.Unlock() for pc := range srv.peerConns { - if err := pc.Close(); err != nil { + if err := pc.GracefulClose(); err != nil { srv.logger.Errorw("error closing peer connection", "error", err) } } @@ -194,12 +194,12 @@ func (srv *webrtcServer) NewChannel( func (srv *webrtcServer) removePeer(peerConn *webrtc.PeerConnection) { srv.peerConnsMu.Lock() - defer srv.peerConnsMu.Unlock() delete(srv.peerConns, peerConn) + srv.peerConnsMu.Unlock() if srv.onPeerRemoved != nil { srv.onPeerRemoved(peerConn) } - if err := peerConn.Close(); err != nil { + if err := peerConn.GracefulClose(); err != nil { srv.logger.Errorw("error closing peer connection on removal", "error", err) } } diff --git a/rpc/wrtc_signaling_answerer.go b/rpc/wrtc_signaling_answerer.go index 87631c3f..6e97aab4 100644 --- a/rpc/wrtc_signaling_answerer.go +++ b/rpc/wrtc_signaling_answerer.go @@ -295,7 +295,7 @@ func (ans *webrtcSignalingAnswerer) answer(client webrtcpb.SignalingService_Answ var successful bool defer func() { if !(successful && err == nil) { - err = multierr.Combine(err, pc.Close()) + err = multierr.Combine(err, pc.GracefulClose()) } else { stats.mu.Lock() stats.success = true