From 9b12bdde8db86bf7b634b6fca5b58ee091fe21ef Mon Sep 17 00:00:00 2001 From: guogang Date: Fri, 5 Aug 2022 15:11:29 -0700 Subject: [PATCH] Fixed the crash in connection close event PiperOrigin-RevId: 465657456 --- .../analytics/analytics_recorder.cc | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/connections/implementation/analytics/analytics_recorder.cc b/connections/implementation/analytics/analytics_recorder.cc index 98dd2515..796cecfa 100644 --- a/connections/implementation/analytics/analytics_recorder.cc +++ b/connections/implementation/analytics/analytics_recorder.cc @@ -15,10 +15,12 @@ #include "connections/implementation/analytics/analytics_recorder.h" #include +#include #include #include #include #include +#include #include "absl/time/time.h" #include "internal/analytics/event_logger.h" @@ -451,12 +453,17 @@ void AnalyticsRecorder::OnConnectionClosed(const std::string &endpoint_id, // re-established with a new ConnectionRequest. auto pair = active_connections_.extract(it); std::unique_ptr &logical_connection = pair.mapped(); - absl::c_copy( - logical_connection->GetEstablisedConnections(), - RepeatedFieldBackInserter( - current_strategy_session_->mutable_established_connection())); + + std::vector connections = + logical_connection->GetEstablisedConnections(); + auto established_connections = + current_strategy_session_->mutable_established_connection(); + for (auto &connection : connections) { + established_connections->Add(std::move(connection)); + } } } + void AnalyticsRecorder::OnIncomingPayloadStarted( const std::string &endpoint_id, std::int64_t payload_id, connections::PayloadType type, std::int64_t total_size_bytes) { @@ -665,8 +672,7 @@ void AnalyticsRecorder::LogStartSession() { session_was_logged_ = false; if (CanRecordAnalyticsLocked(kOnStartClientSession)) { - client_session_ = - std::make_unique(); + client_session_ = std::make_unique(); started_client_session_time_ = SystemClock::ElapsedRealtime(); start_client_session_was_logged_ = true; LogEvent(START_CLIENT_SESSION);