[Checkins] SVN: Sandbox/J1m/resumelb/src/zc/resumelb/lb.py Take a little more care to make sure reader queue is cleaned up when a
Jim Fulton
jim at zope.com
Sun Feb 5 21:10:37 UTC 2012
Log message for revision 124308:
Take a little more care to make sure reader queue is cleaned up when a
request ends in an unusual way.
Changed:
U Sandbox/J1m/resumelb/src/zc/resumelb/lb.py
-=-
Modified: Sandbox/J1m/resumelb/src/zc/resumelb/lb.py
===================================================================
--- Sandbox/J1m/resumelb/src/zc/resumelb/lb.py 2012-02-05 20:58:09 UTC (rev 124307)
+++ Sandbox/J1m/resumelb/src/zc/resumelb/lb.py 2012-02-05 21:10:36 UTC (rev 124308)
@@ -283,37 +283,43 @@
rno = self.nrequest + 1
self.nrequest = rno % self.maxrno
get = self.start(rno)
+ try:
+ self.put((rno, env))
+ content_length = int(env.get('CONTENT_LENGTH', 0))
+ while content_length > 0:
+ data = input.read(min(content_length, block_size))
+ if not data:
+ # Browser disconnected, cancel the request
+ self.put((rno, None))
+ self.end(rno)
+ return
+ content_length -= len(data)
+ self.put((rno, data))
+ self.put((rno, ''))
- self.put((rno, env))
- content_length = int(env.get('CONTENT_LENGTH', 0))
- while content_length > 0:
- data = input.read(min(content_length, block_size))
- if not data:
- # Browser disconnected, cancel the request
- self.put((rno, None))
- self.end(rno)
- return
- content_length -= len(data)
- self.put((rno, data))
- self.put((rno, ''))
+ data = get()
+ if data is None:
+ raise zc.resumelb.util.Disconnected()
+ logger.debug('start_response %r', data)
+ start_response(*data)
+ except:
+ # not using finally here, because we only want to end on error
+ self.end(rno)
+ raise
- data = get()
- if data is None:
- raise zc.resumelb.util.Disconnected()
- logger.debug('start_response %r', data)
- start_response(*data)
-
def content():
- while 1:
- data = get()
- if data:
- logger.debug('yield %r', data)
- yield data
- elif data is None:
- raise zc.resumelb.util.Disconnected()
- else:
- self.end(rno)
- break
+ try:
+ while 1:
+ data = get()
+ if data:
+ logger.debug('yield %r', data)
+ yield data
+ elif data is None:
+ raise zc.resumelb.util.Disconnected()
+ else:
+ break
+ finally:
+ self.end(rno)
return content()
More information about the checkins
mailing list