@@ -59,15 +59,21 @@ class SocketServer::SocketNetworkState : public SocketFdPacketState {
5959 connections_->list .push_back (this );
6060 connection_it_ = --connections_->list .end ();
6161 }
62- explicit SocketNetworkState (std::shared_ptr<PullTable> table,
62+ explicit SocketNetworkState (std::shared_ptr<ConnectionList> connections,
63+ std::shared_ptr<PullTable> table,
6364 std::shared_ptr<BulkTransportFactory> factory,
6465 const SocketAddress& addr)
6566 : table_(std::move(table)),
6667 factory_(std::move(factory)),
67- remote_addr_(addr) {
68+ remote_addr_(addr),
69+ connections_(std::move(connections)) {
70+ absl::MutexLock l (connections_->mu );
71+ connections_->list .push_back (this );
72+ connection_it_ = --connections_->list .end ();
6873 }
6974
7075 ~SocketNetworkState () override {
76+ factory_.reset ();
7177 if (connections_) {
7278 absl::MutexLock l (connections_->mu );
7379 connections_->list .erase (connection_it_);
@@ -550,8 +556,8 @@ SocketServer::~SocketServer() {
550556
551557tsl::RCReference<SocketServer::Connection> SocketServer::Connect (
552558 const SocketAddress& other_addr) {
553- auto * local_ =
554- new SocketNetworkState (pull_table_, bulk_transport_factory_, other_addr);
559+ auto * local_ = new SocketNetworkState (connections_, pull_table_,
560+ bulk_transport_factory_, other_addr);
555561 local_->StartBulkTransporting ();
556562 local_->IncRef ();
557563 local_->StartConnect ();
0 commit comments