Merge "Close ECAppIter's sub-generators before propagating GeneratorExit"

This commit is contained in:
Jenkins 2015-10-19 11:47:50 +00:00 committed by Gerrit Code Review
commit c49f71585b
3 changed files with 9 additions and 7 deletions

View File

@ -919,6 +919,7 @@ class ResumingGetter(object):
if nchunks % 5 == 0:
sleep()
part_iter = None
try:
while True:
start_byte, end_byte, length, headers, part = \
@ -930,9 +931,12 @@ class ResumingGetter(object):
'entity_length': length, 'headers': headers,
'part_iter': part_iter}
self.pop_range()
except GeneratorExit:
if part_iter:
part_iter.close()
raise
except StopIteration:
req.environ['swift.non_client_disconnect'] = True
return
except ChunkReadTimeout:
self.app.exception_occurred(node[0], _('Object'),

View File

@ -2001,7 +2001,7 @@ class TestECObjController(BaseObjectControllerMixin, unittest.TestCase):
try:
resp.body
except ECDriverError:
pass
resp._app_iter.close()
else:
self.fail('invalid ec fragment response body did not blow up!')
error_lines = self.logger.get_lines_for_level('error')

View File

@ -5620,9 +5620,8 @@ class TestObjectController(unittest.TestCase):
# read most of the object, and disconnect
fd.read(10)
fd.close()
sock.close()
sleep(0)
sock.fd._sock.close()
sleep(0.1)
# check for disconnect message!
expected = ['Client disconnected on read'] * 2
@ -5678,8 +5677,7 @@ class TestObjectController(unittest.TestCase):
exp = 'HTTP/1.1 200'
self.assertEqual(headers[:len(exp)], exp)
fd.read(1)
fd.close()
sock.close()
sock.fd._sock.close()
# Make sure the GC is run again for pythons without reference
# counting
for i in range(4):