@@ -95,21 +95,22 @@ def initialize(size, &block)
9595 @members = [ ]
9696 end
9797
98- def checkout
99- @members . pop || @new_member . call
100- end
101-
102- def checkin ( member )
103- # If the pool is already full, we simply drop the extra member.
104- # This is because contrary to a connection pool, creating an extra instance
105- # is extremely unlikely to cause some kind of resource exhaustion.
106- #
107- # We could cycle the members (keep the newer one) but first It's more work and second
108- # the older member might have been created pre-fork, so it might be at least partially
109- # in shared memory.
110- if member && @members . size < @size
111- member . reset
112- @members << member
98+ def with
99+ member = @members . pop || @new_member . call
100+ begin
101+ yield member
102+ ensure
103+ # If the pool is already full, we simply drop the extra member.
104+ # This is because contrary to a connection pool, creating an extra instance
105+ # is extremely unlikely to cause some kind of resource exhaustion.
106+ #
107+ # We could cycle the members (keep the newer one) but first It's more work and second
108+ # the older member might have been created pre-fork, so it might be at least partially
109+ # in shared memory.
110+ if member && @members . size < @size
111+ member . reset
112+ @members << member
113+ end
113114 end
114115 end
115116 end
@@ -122,15 +123,16 @@ def initialize(size, &block)
122123 @mutex = Mutex . new
123124 end
124125
125- def checkout
126- @mutex . synchronize { @members . pop } || @new_member . call
127- end
128-
129- def checkin ( member )
130- member . reset
131- @mutex . synchronize do
132- if member && @members . size < @size
133- @members << member
126+ def with
127+ member = @mutex . synchronize { @members . pop } || @new_member . call
128+ begin
129+ yield member
130+ ensure
131+ member . reset
132+ @mutex . synchronize do
133+ if member && @members . size < @size
134+ @members << member
135+ end
134136 end
135137 end
136138 end
@@ -145,41 +147,25 @@ def initialize(factory, size, options = nil)
145147 end
146148
147149 def load ( data )
148- unpacker = @unpackers . checkout
149- begin
150- unpacker . feed_reference ( data )
150+ @unpackers . with do |unpacker |
151+ unpacker . feed ( data )
151152 unpacker . full_unpack
152- ensure
153- @unpackers . checkin ( unpacker )
154153 end
155154 end
156155
157156 def dump ( object )
158- packer = @packers . checkout
159- begin
157+ @packers . with do |packer |
160158 packer . write ( object )
161159 packer . full_pack
162- ensure
163- @packers . checkin ( packer )
164160 end
165161 end
166162
167- def unpacker
168- unpacker = @unpackers . checkout
169- begin
170- yield unpacker
171- ensure
172- @unpackers . checkin ( unpacker )
173- end
163+ def unpacker ( &block )
164+ @unpackers . with ( &block )
174165 end
175166
176- def packer
177- packer = @packers . checkout
178- begin
179- yield packer
180- ensure
181- @packers . checkin ( packer )
182- end
167+ def packer ( &block )
168+ @packers . with ( &block )
183169 end
184170 end
185171 end
0 commit comments