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 |