Changeset 1660
- Timestamp:
- 06/06/07 17:30:12
- Files:
-
- trunk/cherrypy/_cpserver.py (modified) (1 diff)
- trunk/cherrypy/_cpwsgi.py (modified) (1 diff)
- trunk/cherrypy/test/test_states.py (modified) (2 diffs)
- trunk/cherrypy/wsgiserver/__init__.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/_cpserver.py
r1627 r1660 45 45 socket_queue_size = 5 46 46 socket_timeout = 10 47 shutdown_timeout = 5 47 48 protocol_version = 'HTTP/1.1' 48 49 reverse_dns = False trunk/cherrypy/_cpwsgi.py
r1627 r1660 372 372 request_queue_size = server.socket_queue_size, 373 373 timeout = server.socket_timeout, 374 shutdown_timeout = server.shutdown_timeout, 374 375 ) 375 376 self.protocol = server.protocol_version trunk/cherrypy/test/test_states.py
r1627 r1660 44 44 'environment': 'test_suite', 45 45 'engine.deadlock_poll_freq': 0.1, 46 'response.timeout': 0.2,47 46 }) 48 47 … … 215 214 216 215 def test_3_Deadlocks(self): 216 cherrypy.config.update({'response.timeout': 0.2}) 217 217 218 cherrypy.engine.start() 218 219 cherrypy.server.start() trunk/cherrypy/wsgiserver/__init__.py
r1627 r1660 675 675 """ 676 676 677 conn = None 678 677 679 def __init__(self, server): 678 680 self.ready = False … … 688 690 return 689 691 692 self.conn = conn 690 693 try: 691 694 conn.communicate() 692 695 finally: 693 696 conn.close() 697 self.conn = None 694 698 except (KeyboardInterrupt, SystemExit), exc: 695 699 self.server.interrupt = exc … … 767 771 768 772 def __init__(self, bind_addr, wsgi_app, numthreads=10, server_name=None, 769 max=-1, request_queue_size=5, timeout=10 ):773 max=-1, request_queue_size=5, timeout=10, shutdown_timeout=5): 770 774 self.requests = Queue.Queue(max) 771 775 … … 791 795 792 796 self.timeout = timeout 797 self.shutdown_timeout = shutdown_timeout 793 798 794 799 def start(self): … … 872 877 # Wait for self.stop() to complete. See _set_interrupt. 873 878 time.sleep(0.1) 874 raise self.interrupt 879 if self.interrupt: 880 raise self.interrupt 875 881 876 882 def bind(self, family, type, proto=0): … … 969 975 # Don't join currentThread (when stop is called inside a request). 970 976 current = threading.currentThread() 977 timeout = self.shutdown_timeout 971 978 while self._workerThreads: 972 979 worker = self._workerThreads.pop() 973 980 if worker is not current and worker.isAlive: 974 981 try: 975 worker.join() 976 except AssertionError: 982 if timeout is None or timeout < 0: 983 worker.join() 984 else: 985 worker.join(timeout) 986 if worker.isAlive: 987 # We exhausted the timeout. 988 # Forcibly shut down the socket. 989 c = worker.conn 990 if c and not c.rfile.closed: 991 if SSL and isinstance(c.socket, SSL.ConnectionType): 992 # pyOpenSSL.socket.shutdown takes no args 993 c.socket.shutdown() 994 else: 995 c.socket.shutdown(socket.SHUT_RD) 996 worker.join() 997 except (AssertionError, 998 # Ignore repeated Ctrl-C. 999 # See http://www.cherrypy.org/ticket/691. 1000 KeyboardInterrupt), exc1: 1001 print exc1 977 1002 pass 978 1003

