{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":55187676,"defaultBranch":"master","name":"peer-calls","ownerLogin":"peer-calls","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2016-03-31T22:41:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/63143196?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1713124702.0","currentOid":""},"activityList":{"items":[{"before":"7800bfa23a6b6540e1b3cb2adece440cd0d81e10","after":"d43abf6538de326910661427f76304a1e08a2330","ref":"refs/heads/master","pushedAt":"2024-04-14T19:57:16.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Merge pull request #290 from peer-calls/jeremija/upgrade-pion\n\nUpgrade pion to v.3.2.37","shortMessageHtmlLink":"Merge pull request #290 from peer-calls/jeremija/upgrade-pion"}},{"before":null,"after":"ed522bed1fa35815a0db17df9069e105bd4f3944","ref":"refs/heads/jeremija/upgrade-pion","pushedAt":"2024-04-14T19:49:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Upgrade pion to v.3.2.37","shortMessageHtmlLink":"Upgrade pion to v.3.2.37"}},{"before":"0e404102b67d371634dc80da0b5b661d6b7431ea","after":"7800bfa23a6b6540e1b3cb2adece440cd0d81e10","ref":"refs/heads/master","pushedAt":"2024-04-14T19:44:08.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Merge pull request #289 from peer-calls/jeremija/fix-node-16-deprecation-warning\n\nFix node 16 deprecation warning","shortMessageHtmlLink":"Merge pull request #289 from peer-calls/jeremija/fix-node-16-deprecat…"}},{"before":"082a19f157ebfdd7bfd6370f695289d65b5e2bbc","after":"8b74e1747768bc4430cfe6f70035161a5b899eac","ref":"refs/heads/jeremija/fix-node-16-deprecation-warning","pushedAt":"2024-04-14T19:35:23.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix node 16 deprecation warning","shortMessageHtmlLink":"Fix node 16 deprecation warning"}},{"before":"3accb0cc644eb2fb405893803b34cb0b022d3f8c","after":"082a19f157ebfdd7bfd6370f695289d65b5e2bbc","ref":"refs/heads/jeremija/fix-node-16-deprecation-warning","pushedAt":"2024-02-19T01:46:35.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix node 16 deprecation warning","shortMessageHtmlLink":"Fix node 16 deprecation warning"}},{"before":"7fceff31946b8f831d5492c3bcfe94bdb388149b","after":"3accb0cc644eb2fb405893803b34cb0b022d3f8c","ref":"refs/heads/jeremija/fix-node-16-deprecation-warning","pushedAt":"2024-02-19T00:48:29.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix node 16 deprecation warning","shortMessageHtmlLink":"Fix node 16 deprecation warning"}},{"before":null,"after":"7fceff31946b8f831d5492c3bcfe94bdb388149b","ref":"refs/heads/jeremija/fix-node-16-deprecation-warning","pushedAt":"2024-02-19T00:37:30.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix node 16 deprecation warning","shortMessageHtmlLink":"Fix node 16 deprecation warning"}},{"before":"ac8fb89098ebd0a23882d38b060bf47acb8a8e6c","after":"0e404102b67d371634dc80da0b5b661d6b7431ea","ref":"refs/heads/master","pushedAt":"2024-02-19T00:31:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Run npm audit fix","shortMessageHtmlLink":"Run npm audit fix"}},{"before":"2bc9d05b648d9d72e61da27d427c85e5cf6c522b","after":"ac8fb89098ebd0a23882d38b060bf47acb8a8e6c","ref":"refs/heads/master","pushedAt":"2024-02-19T00:28:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix broken release once more, update node version","shortMessageHtmlLink":"Fix broken release once more, update node version"}},{"before":"32102d71074f38dad2b31bd65669d9d8b8082aec","after":"2bc9d05b648d9d72e61da27d427c85e5cf6c522b","ref":"refs/heads/master","pushedAt":"2024-02-19T00:21:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix broken gh release, update Go","shortMessageHtmlLink":"Fix broken gh release, update Go"}},{"before":"f35fd76df807febc045b24046d1feb691b7784dd","after":"32102d71074f38dad2b31bd65669d9d8b8082aec","ref":"refs/heads/master","pushedAt":"2024-02-19T00:10:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"jeremija","name":"Jerko Steiner","path":"/jeremija","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1489493?s=80&v=4"},"commit":{"message":"Fix: deadlock in server.Signaller.Close\n\nThere was a deadlock in `Signaller` if `Signaller.Close` if an ICE\ncandidate (signal) was being handled at the same time, since both\n`onSignal` and `Close` would try to acquire the same `signalMu` lock:\n\n Signaller.Close() called\n Signaller.signalMu.lock() called\n Signaller.peerConnection.Close() called\n |----|----|------------------------------->\n t0 t1 t2 t\n\nIf `webrtc.PeerConnection` generates an ICE candidate just after the\n`signalMu.lock()` is acquired, but before\n`Signaller.peerConnection.Close()` had been called (after t1, but before\nt2), the peer connection would call the registered callback, `onSignal`,\nwhich would try to acquire the same lock. Because the\n`webrtc.PeerConnection.Close` waits until `ICETransport` shuts down, it\nwould deadlock indefinitely.\n\nThe only reason there's a lock in the first place is so we can safely\nclose the `signalChannel` after the peer connection is closed. In theory\nwe should be able to just close the `signalChannel` after the\n`webrtc.PeerConnection` is closed, but I remember dealing with some edge\ncases a couple of years ago and it didn't quite work. The issue is that\nsome handlers are called in a new goroutine and there can still be a\nstale goroutine _after_ the peer connection is closed.\n\nI used this test to assert this fix actually works (placed in\n`server/sfu_test.go`), but it would occasionally leave some goroutines\nrunning because they didn't have the chance to proprely tear down so I\ndidn't leave the test:\n\n func TestSFU_PeerConnection_CloseImmediately(t *testing.T) {\n log := test.NewLogger()\n\n defer goleak.VerifyNone(t)\n\n newAdapter := server.NewAdapterFactory(log, server.StoreConfig{})\n defer newAdapter.Close()\n\n rooms := server.NewAdapterRoomManager(newAdapter.NewAdapter)\n srv, wsBaseURL := setupSFUServer(rooms, false)\n defer srv.Close()\n\n ctx, cancel := context.WithTimeout(context.Background(), timeout)\n defer cancel()\n\n peerCtx := createPeerConnection(t, ctx, wsBaseURL+roomName.String()+\"/\"+clientID.String(), clientID)\n peerCtx.close()\n\n // Allow the remaining goroutines to terminate.\n runtime.Gosched()\n }","shortMessageHtmlLink":"Fix: deadlock in server.Signaller.Close"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEMFZqQwA","startCursor":null,"endCursor":null}},"title":"Activity · peer-calls/peer-calls"}