mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Fix datarace for WebRTCPeer.closed
The race condition occurs because concurrent goroutines are intermixing reads and writes of `WebRTCPeer.closed`. Spotted when integrating Snowflake inside OONI in https://github.com/ooni/probe-cli/pull/373.
This commit is contained in:
parent
ed2d5df87d
commit
ddcdfc4f09
3 changed files with 23 additions and 11 deletions
|
@ -33,7 +33,7 @@ type FakeDialer struct {
|
|||
|
||||
func (w FakeDialer) Catch() (*WebRTCPeer, error) {
|
||||
fmt.Println("Caught a dummy snowflake.")
|
||||
return &WebRTCPeer{}, nil
|
||||
return &WebRTCPeer{closed: make(chan struct{})}, nil
|
||||
}
|
||||
|
||||
func (w FakeDialer) GetMax() int {
|
||||
|
@ -97,7 +97,7 @@ func TestSnowflakeClient(t *testing.T) {
|
|||
So(err, ShouldNotBeNil)
|
||||
So(p.Count(), ShouldEqual, c)
|
||||
|
||||
// But popping and closing allows it to continue.
|
||||
// But popping allows it to continue.
|
||||
s := p.Pop()
|
||||
s.Close()
|
||||
So(s, ShouldNotBeNil)
|
||||
|
@ -127,7 +127,7 @@ func TestSnowflakeClient(t *testing.T) {
|
|||
cnt := 5
|
||||
p, _ := NewPeers(FakeDialer{max: cnt})
|
||||
for i := 0; i < cnt; i++ {
|
||||
p.activePeers.PushBack(&WebRTCPeer{})
|
||||
p.activePeers.PushBack(&WebRTCPeer{closed: make(chan struct{})})
|
||||
}
|
||||
So(p.Count(), ShouldEqual, cnt)
|
||||
p.End()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue