mirror of
https://github.com/pion/webrtc.git
synced 2025-12-24 11:51:03 +08:00
Make RTPTransceiver Stopped an atomic
Add an accessor to make getting value easy. Also add TestPeerConnection_SkipStoppedTransceiver. This commit also cleans up RTPTransceiver creation. We used a helper function, when we should have just used the provide constructor
This commit is contained in:
@@ -19,7 +19,7 @@ type RTPTransceiver struct {
|
||||
|
||||
codecs []RTPCodecParameters // User provided codecs via SetCodecPreferences
|
||||
|
||||
stopped bool
|
||||
stopped atomicBool
|
||||
kind RTPCodecType
|
||||
|
||||
api *API
|
||||
@@ -141,21 +141,26 @@ func (t *RTPTransceiver) Direction() RTPTransceiverDirection {
|
||||
|
||||
// Stop irreversibly stops the RTPTransceiver
|
||||
func (t *RTPTransceiver) Stop() error {
|
||||
if sender := t.Sender(); sender != nil {
|
||||
if err := sender.Stop(); err != nil {
|
||||
return err
|
||||
if t.stopped.compareAndSwap(false, true) {
|
||||
if sender := t.Sender(); sender != nil {
|
||||
if err := sender.Stop(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
if receiver := t.Receiver(); receiver != nil {
|
||||
if err := receiver.Stop(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if receiver := t.Receiver(); receiver != nil {
|
||||
if err := receiver.Stop(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t.setDirection(RTPTransceiverDirectionInactive)
|
||||
t.setDirection(RTPTransceiverDirectionInactive)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stopped indicates whether or not RTPTransceiver has been stopped
|
||||
func (t *RTPTransceiver) Stopped() bool { return t.stopped.get() }
|
||||
|
||||
func (t *RTPTransceiver) setReceiver(r *RTPReceiver) {
|
||||
if r != nil {
|
||||
r.setRTPTransceiver(t)
|
||||
|
||||
Reference in New Issue
Block a user