summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/scripts/swig_bot.py3
-rw-r--r--lldb/scripts/swig_bot_lib/server.py28
2 files changed, 21 insertions, 10 deletions
diff --git a/lldb/scripts/swig_bot.py b/lldb/scripts/swig_bot.py
index 38e65ca1e26..0f5238e1a81 100644
--- a/lldb/scripts/swig_bot.py
+++ b/lldb/scripts/swig_bot.py
@@ -57,6 +57,9 @@ if __name__ == "__main__":
else:
logging.error("Unknown mode specified. Expected client or server.")
sys.exit(-1)
+ except KeyboardInterrupt as e:
+ logging.info("Ctrl+C received. Shutting down...")
+ sys.exit(-1)
except Exception as e:
error = traceback.format_exc()
logging.error("An error occurred running swig-bot.")
diff --git a/lldb/scripts/swig_bot_lib/server.py b/lldb/scripts/swig_bot_lib/server.py
index ab9baaf7cc0..0751ce8a29a 100644
--- a/lldb/scripts/swig_bot_lib/server.py
+++ b/lldb/scripts/swig_bot_lib/server.py
@@ -13,6 +13,7 @@ from __future__ import print_function
import argparse
import logging
import os
+import select
import socket
import struct
import sys
@@ -53,16 +54,23 @@ def initialize_listening_socket(options):
def accept_once(sock, options):
logging.debug("Waiting for connection...")
- client, addr = sock.accept()
- logging.info("Received connection from {}".format(addr))
- data_size = struct.unpack("!I", sockutil.recvall(client, 4))[0]
- logging.debug("Expecting {} bytes of data from client".format(data_size))
- data = sockutil.recvall(client, data_size)
- logging.info("Received {} bytes of data from client".format(len(data)))
-
- logging.info("Sending {} byte response".format(len(data)))
- client.sendall(struct.pack("!I", len(data)))
- client.sendall(data)
+ while True:
+ rlist, wlist, xlist = select.select([sock], [], [], 0.5)
+ if not rlist:
+ continue
+
+ client, addr = sock.accept()
+ logging.info("Received connection from {}".format(addr))
+ data_size = struct.unpack("!I", sockutil.recvall(client, 4))[0]
+ logging.debug("Expecting {} bytes of data from client"
+ .format(data_size))
+ data = sockutil.recvall(client, data_size)
+ logging.info("Received {} bytes of data from client"
+ .format(len(data)))
+
+ logging.info("Sending {} byte response".format(len(data)))
+ client.sendall(struct.pack("!I", len(data)))
+ client.sendall(data)
def accept_loop(sock, options):
while True:
OpenPOWER on IntegriCloud