| Index: net/socket/client_socket_pool_base.h
|
| diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h
|
| index 470c120ed618401f82346822c330dfe55b20b1e9..a037b0e2a0783b40ff0c11b62bc0758b9a304f2a 100644
|
| --- a/net/socket/client_socket_pool_base.h
|
| +++ b/net/socket/client_socket_pool_base.h
|
| @@ -188,8 +188,12 @@ class ClientSocketPoolBaseHelper
|
|
|
| // See ClientSocketPool::ReleaseSocket for documentation on this function.
|
| void ReleaseSocket(const std::string& group_name,
|
| - ClientSocket* socket);
|
| + ClientSocket* socket,
|
| + int id);
|
|
|
| + // See ClientSocketPool::Flush for documentation on this function.
|
| + void Flush();
|
| +
|
| // See ClientSocketPool::CloseIdleSockets for documentation on this function.
|
| void CloseIdleSockets();
|
|
|
| @@ -216,7 +220,7 @@ class ClientSocketPoolBaseHelper
|
| virtual void OnConnectJobComplete(int result, ConnectJob* job);
|
|
|
| // NetworkChangeNotifier::Observer methods:
|
| - virtual void OnIPAddressChanged();
|
| + virtual void OnIPAddressChanged() { Flush(); }
|
|
|
| // For testing.
|
| bool may_have_stalled_group() const { return may_have_stalled_group_; }
|
| @@ -335,7 +339,8 @@ class ClientSocketPoolBaseHelper
|
| void DecrementIdleCount();
|
|
|
| // Called via PostTask by ReleaseSocket.
|
| - void DoReleaseSocket(const std::string& group_name, ClientSocket* socket);
|
| + void DoReleaseSocket(
|
| + const std::string& group_name, ClientSocket* socket, int id);
|
|
|
| // Scans the group map for groups which have an available socket slot and
|
| // at least one pending request. Returns number of groups found, and if found
|
| @@ -451,6 +456,11 @@ class ClientSocketPoolBaseHelper
|
|
|
| // A factory to pin the backup_job tasks.
|
| ScopedRunnableMethodFactory<ClientSocketPoolBaseHelper> method_factory_;
|
| +
|
| + // A unique id for the pool. It gets incremented every time we Flush() the
|
| + // pool. This is so that when sockets get released back to the pool, we can
|
| + // make sure that they are discarded rather than reused.
|
| + int pool_generation_number_;
|
| };
|
|
|
| } // namespace internal
|
| @@ -542,8 +552,8 @@ class ClientSocketPoolBase {
|
| return helper_->CancelRequest(group_name, handle);
|
| }
|
|
|
| - void ReleaseSocket(const std::string& group_name, ClientSocket* socket) {
|
| - return helper_->ReleaseSocket(group_name, socket);
|
| + void ReleaseSocket(const std::string& group_name, ClientSocket* socket, int id) {
|
| + return helper_->ReleaseSocket(group_name, socket, id);
|
| }
|
|
|
| void CloseIdleSockets() { return helper_->CloseIdleSockets(); }
|
| @@ -586,6 +596,8 @@ class ClientSocketPoolBase {
|
|
|
| void enable_backup_jobs() { helper_->enable_backup_jobs(); }
|
|
|
| + void Flush() { helper_->Flush(); }
|
| +
|
| private:
|
| // This adaptor class exists to bridge the
|
| // internal::ClientSocketPoolBaseHelper::ConnectJobFactory and
|
|
|