aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rubygems/request/http_pool.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rubygems/request/http_pool.rb')
-rw-r--r--lib/rubygems/request/http_pool.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/rubygems/request/http_pool.rb b/lib/rubygems/request/http_pool.rb
new file mode 100644
index 0000000000..61c8884af7
--- /dev/null
+++ b/lib/rubygems/request/http_pool.rb
@@ -0,0 +1,38 @@
+##
+# A connection "pool" that only manages one connection for now. Provides
+# thread safe `checkout` and `checkin` methods. The pool consists of one
+# connection that corresponds to `http_args`. This class is private, do not
+# use it.
+
+class Gem::Request::HTTPPool # :nodoc:
+ attr_reader :cert_files, :proxy_uri
+
+ def initialize http_args, cert_files, proxy_uri
+ @http_args = http_args
+ @cert_files = cert_files
+ @proxy_uri = proxy_uri
+ @queue = SizedQueue.new 1
+ @queue << nil
+ end
+
+ def checkout
+ @queue.pop || make_connection
+ end
+
+ def checkin connection
+ @queue.push connection
+ end
+
+ private
+
+ def make_connection
+ setup_connection Gem::Request::ConnectionPools.client.new(*@http_args)
+ end
+
+ def setup_connection connection
+ connection.start
+ connection
+ end
+
+end
+