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
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):