diff --git a/trytond/config.py b/trytond/config.py index f2691fcbed..4f66ef6070 100644 --- a/trytond/config.py +++ b/trytond/config.py @@ -36,6 +36,7 @@ class ConfigManager(object): 'smtp_password': False, 'stop_after_init': False, 'data_path': '/var/lib/trytond', + 'max_thread': 40, } parser = optparse.OptionParser(version=VERSION) diff --git a/trytond/netsvc.py b/trytond/netsvc.py index 89e2804e82..93c5ca331d 100644 --- a/trytond/netsvc.py +++ b/trytond/netsvc.py @@ -332,7 +332,7 @@ class TinySocketClientThread(threading.Thread): try: msg = pysocket.receive() except: - self.sock.close() + pysocket.disconnect() self.threads.remove(self) return False if first: @@ -394,10 +394,13 @@ class TinySocketServerThread(threading.Thread): try: self.running = True while self.running: - (clientsocket, address) = self.socket.accept() - c_thread = TinySocketClientThread(clientsocket, self.threads, self.secure) - self.threads.append(c_thread) - c_thread.start() + if not int(CONFIG['max_thread']) \ + or len(self.threads) < int(CONFIG['max_thread']): + (clientsocket, address) = self.socket.accept() + c_thread = TinySocketClientThread(clientsocket, self.threads, + self.secure) + self.threads.append(c_thread) + c_thread.start() self.socket.close() except Exception, exp: self.socket.close() @@ -426,6 +429,8 @@ class TinySocketServerThread(threading.Thread): class BaseThreadedHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer): + max_children = CONFIG['max_thread'] + def server_bind(self): self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)