Make ID of datachannel stats not depend on dc.id
The ID of stats was based on the datachannel's "id"
attribute, but that could change - it was -1 before ID
allocation, and a number afterwards.
This CL changes the stats ID to depend on a monotonically
increasing counter for allocated datachannels.
Bug: webrtc:10842
Change-Id: I3e0c5dc07df8a7a502396de06bbedc9f676994a0
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147642
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28720}
diff --git a/pc/data_channel.cc b/pc/data_channel.cc
index cd4dded..f4a3818 100644
--- a/pc/data_channel.cc
+++ b/pc/data_channel.cc
@@ -28,6 +28,16 @@
static size_t kMaxQueuedReceivedDataBytes = 16 * 1024 * 1024;
static size_t kMaxQueuedSendDataBytes = 16 * 1024 * 1024;
+namespace {
+
+static std::atomic<int> g_unique_id{0};
+
+int GenerateUniqueId() {
+ return ++g_unique_id;
+}
+
+} // namespace
+
InternalDataChannelInit::InternalDataChannelInit(const DataChannelInit& base)
: DataChannelInit(base), open_handshake_role(kOpener) {
// If the channel is externally negotiated, do not send the OPEN message.
@@ -144,7 +154,8 @@
DataChannel::DataChannel(DataChannelProviderInterface* provider,
cricket::DataChannelType dct,
const std::string& label)
- : label_(label),
+ : internal_id_(GenerateUniqueId()),
+ label_(label),
observer_(nullptr),
state_(kConnecting),
messages_sent_(0),
@@ -705,4 +716,9 @@
return retval;
}
+// static
+void DataChannel::ResetInternalIdAllocatorForTesting(int new_value) {
+ g_unique_id = new_value;
+}
+
} // namespace webrtc