Avoid touching channel after OnSctpDataChannelClosed
Bug: chromium:1454086 Change-Id: I39573b706c4031d091c45a182b13cb3b2dba6233 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/309920 Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40332}
This commit is contained in:
parent
afa0f22070
commit
eec1810760
@ -70,6 +70,11 @@ void DataChannelController::OnChannelStateChanged(
|
||||
SctpDataChannel* channel,
|
||||
DataChannelInterface::DataState state) {
|
||||
RTC_DCHECK_RUN_ON(network_thread());
|
||||
|
||||
// Stash away the internal id here in case `OnSctpDataChannelClosed` ends up
|
||||
// releasing the last reference to the channel.
|
||||
const int channel_id = channel->internal_id();
|
||||
|
||||
if (state == DataChannelInterface::DataState::kClosed)
|
||||
OnSctpDataChannelClosed(channel);
|
||||
|
||||
@ -77,8 +82,7 @@ void DataChannelController::OnChannelStateChanged(
|
||||
? DataChannelUsage::kHaveBeenUsed
|
||||
: DataChannelUsage::kInUse;
|
||||
signaling_thread()->PostTask(SafeTask(
|
||||
signaling_safety_.flag(), [this, channel_id = channel->internal_id(),
|
||||
state = state, channel_usage] {
|
||||
signaling_safety_.flag(), [this, channel_id, state, channel_usage] {
|
||||
RTC_DCHECK_RUN_ON(signaling_thread());
|
||||
channel_usage_ = channel_usage;
|
||||
pc_->OnSctpDataChannelStateChanged(channel_id, state);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user