Refactor QuicDispatcher to not pass a session map iterator across functions.

This should simplify a refactor of QuicDispatcher to make it work with the public API.

PiperOrigin-RevId: 345754112
Change-Id: I2d12b7673b3623de1fe9b6bb6a36aa456c4aff2d
diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 3e0846c..8439f1e 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -738,7 +738,7 @@
   return kFateProcess;
 }
 
-void QuicDispatcher::CleanUpSession(SessionMap::iterator it,
+void QuicDispatcher::CleanUpSession(QuicConnectionId server_connection_id,
                                     QuicConnection* connection,
                                     ConnectionCloseSource /*source*/) {
   write_blocked_list_.erase(connection);
@@ -770,18 +770,16 @@
           // |action| argument is not used by this call to
           // StatelesslyTerminateConnection().
           action);
-      session_map_.erase(it);
       return;
     }
     QUIC_CODE_COUNT(quic_v44_add_to_time_wait_list_with_stateless_reset);
   }
   time_wait_list_manager_->AddConnectionIdToTimeWait(
-      it->first, action,
+      server_connection_id, action,
       TimeWaitConnectionInfo(
           connection->version().HasIetfInvariantHeader(),
           connection->termination_packets(),
           connection->sent_packet_manager().GetRttStats()->smoothed_rtt()));
-  session_map_.erase(it);
 }
 
 void QuicDispatcher::StartAcceptingNewConnections() {
@@ -885,7 +883,8 @@
     }
     closed_session_list_.push_back(std::move(it->second));
   }
-  CleanUpSession(it, connection, source);
+  CleanUpSession(it->first, connection, source);
+  session_map_.erase(it);
 }
 
 void QuicDispatcher::OnWriteBlocked(
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index ca83a79..d2711e0 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -261,11 +261,12 @@
       QuicBufferedPacketStore::EnqueuePacketResult result,
       QuicConnectionId server_connection_id);
 
-  // Removes the session from the session map and write blocked list, and adds
-  // the ConnectionId to the time-wait list.
-  virtual void CleanUpSession(SessionMap::iterator it,
-                              QuicConnection* connection,
-                              ConnectionCloseSource source);
+  // Removes the session from the write blocked list, and adds the ConnectionId
+  // to the time-wait list.  The caller needs to manually remove the session
+  // from the map after that.
+  void CleanUpSession(QuicConnectionId server_connection_id,
+                      QuicConnection* connection,
+                      ConnectionCloseSource source);
 
   // Called to terminate a connection statelessly. Depending on |format|, either
   // 1) send connection close with |error_code| and |error_details| and add