| Index: net/socket/client_socket_pool.h
|
| diff --git a/net/socket/client_socket_pool.h b/net/socket/client_socket_pool.h
|
| index 92f0c413ac38628b20ce2ae934359840ba7aa6fe..86450924763b691e3c9c13451dd437d36b8f38e7 100644
|
| --- a/net/socket/client_socket_pool.h
|
| +++ b/net/socket/client_socket_pool.h
|
| @@ -10,6 +10,7 @@
|
| #include <string>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/debug/stack_trace.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/time.h"
|
| #include "base/template_util.h"
|
| @@ -29,6 +30,32 @@ class ClientSocketHandle;
|
| class ClientSocketPoolHistograms;
|
| class StreamSocket;
|
|
|
| +// ClientSocketPools are layered. This defines an interface for lower level
|
| +// socket pools to communicate with higher layer pools.
|
| +class NET_EXPORT LayeredPool {
|
| + public:
|
| + LayeredPool();
|
| + virtual ~LayeredPool();
|
| +
|
| + // Instructs the LayeredPool to close an idle connection. Return true if one
|
| + // was closed.
|
| + virtual bool CloseOneIdleConnection() = 0;
|
| +
|
| + // TODO(rch): remove this once we track down the use-after-free
|
| + void CrashIfFreed();
|
| +
|
| + private:
|
| + // TODO(rch): Remove this once we track down the use-after-free
|
| + enum MagicValue {
|
| + ALIVE = 0xCA11AB1E,
|
| + DEAD = 0xDEADBEEF
|
| + };
|
| +
|
| + // TODO(rch): Remove this once we track down the use-after-free
|
| + MagicValue magic_value_;
|
| + base::debug::StackTrace stack_trace_;
|
| +};
|
| +
|
| // A ClientSocketPool is used to restrict the number of sockets open at a time.
|
| // It also maintains a list of idle persistent sockets.
|
| //
|
| @@ -110,6 +137,10 @@ class NET_EXPORT ClientSocketPool {
|
| // the pool. Does not flush any pools wrapped by |this|.
|
| virtual void Flush() = 0;
|
|
|
| + // Returns true if a there is currently a request blocked on the
|
| + // per-pool (not per-host) max socket limit.
|
| + virtual bool IsStalled() const = 0;
|
| +
|
| // Called to close any idle connections held by the connection manager.
|
| virtual void CloseIdleSockets() = 0;
|
|
|
| @@ -123,6 +154,12 @@ class NET_EXPORT ClientSocketPool {
|
| virtual LoadState GetLoadState(const std::string& group_name,
|
| const ClientSocketHandle* handle) const = 0;
|
|
|
| + // Adds a LayeredPool on top of |this|.
|
| + virtual void AddLayeredPool(LayeredPool* layered_pool) = 0;
|
| +
|
| + // Removes a LayeredPool from |this|.
|
| + virtual void RemoveLayeredPool(LayeredPool* layered_pool) = 0;
|
| +
|
| // Retrieves information on the current state of the pool as a
|
| // DictionaryValue. Caller takes possession of the returned value.
|
| // If |include_nested_pools| is true, the states of any nested
|
|
|