]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Fix the "pipelined" system test on OpenBSD
authorMichał Kępień <michal@isc.org>
Thu, 6 Feb 2020 12:36:32 +0000 (13:36 +0100)
committerOndřej Surý <ondrej@isc.org>
Sat, 8 Feb 2020 22:01:21 +0000 (14:01 -0800)
On OpenBSD, the bin/tests/system/pipelined/ans5/ans.py script does not
shut down when it is sent the SIGTERM signal.  What seems to be
happening is that starting the UDP listening thread somehow makes the
accept() calls in the script's main thread uninterruptible and thus the
SIGTERM signal sent to the main thread does not get processed until a
TCP connection is established with the script's TCP socket.  Work around
the issue by setting a timeout for operations performed on the script's
TCP socket, so that each accept() call in the main thread's infinite
loop returns after at most 1 second, allowing termination signals sent
to the script to be processed.

bin/tests/system/pipelined/ans5/ans.py

index 1ebf328d6df09bf4a1f04cf6457c188f6d43d0b0..ffb1d89db8e41035b053b0c45c2c24b6b0f5d3e6 100644 (file)
@@ -182,13 +182,17 @@ def main():
     sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     sock.bind((listenip, port))
     sock.listen(1)
+    sock.settimeout(1)
 
     while True:
-        (clientsock, _) = sock.accept()
-        log('Accepted connection from %s' % clientsock)
-        thread = TCPDelayer(clientsock, serverip, port)
-        thread.start()
-        THREADS.append(thread)
+        try:
+            (clientsock, _) = sock.accept()
+            log('Accepted connection from %s' % clientsock)
+            thread = TCPDelayer(clientsock, serverip, port)
+            thread.start()
+            THREADS.append(thread)
+        except socket.timeout:
+            pass
 
 if __name__ == '__main__':
     main()