Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Unified Diff: net/socket/client_socket_pool.h

Issue 18796003: When an idle socket is added back to a socket pool, check for stalled jobs in lower pools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Update comments Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/socket/client_socket_handle.cc ('k') | net/socket/client_socket_pool_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/socket/client_socket_pool.h
===================================================================
--- net/socket/client_socket_pool.h (revision 219027)
+++ net/socket/client_socket_pool.h (working copy)
@@ -31,19 +31,38 @@
// ClientSocketPools are layered. This defines an interface for lower level
// socket pools to communicate with higher layer pools.
-class NET_EXPORT LayeredPool {
+class NET_EXPORT HigherLayeredPool {
public:
- virtual ~LayeredPool() {};
+ virtual ~HigherLayeredPool() {}
- // Instructs the LayeredPool to close an idle connection. Return true if one
- // was closed.
+ // Instructs the HigherLayeredPool to close an idle connection. Return true if
+ // one was closed. Closing an idle connection will call into the lower layer
+ // pool it came from, so must be careful of re-entrancy when using this.
virtual bool CloseOneIdleConnection() = 0;
};
+// ClientSocketPools are layered. This defines an interface for higher level
+// socket pools to communicate with lower layer pools.
+class NET_EXPORT LowerLayeredPool {
+ public:
+ virtual ~LowerLayeredPool() {}
+
+ // Returns true if a there is currently a request blocked on the per-pool
+ // (not per-host) max socket limit, either in this pool, or one that it is
+ // layered on top of.
+ virtual bool IsStalled() const = 0;
+
+ // Called to add or remove a higher layer pool on top of |this|. A higher
+ // layer pool may be added at most once to |this|, and must be removed prior
+ // to destruction of |this|.
+ virtual void AddHigherLayeredPool(HigherLayeredPool* higher_pool) = 0;
+ virtual void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) = 0;
+};
+
// A ClientSocketPool is used to restrict the number of sockets open at a time.
// It also maintains a list of idle persistent sockets.
//
-class NET_EXPORT ClientSocketPool {
+class NET_EXPORT ClientSocketPool : public LowerLayeredPool {
public:
// Subclasses must also have an inner class SocketParams which is
// the type for the |params| argument in RequestSocket() and
@@ -126,10 +145,6 @@
// Does not flush any pools wrapped by |this|.
virtual void FlushWithError(int error) = 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;
@@ -143,12 +158,6 @@
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
« no previous file with comments | « net/socket/client_socket_handle.cc ('k') | net/socket/client_socket_pool_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698