[projects/pld-builder.new] request_handler_server: fork per request to fix SSL handshake timeouts

arekm arekm at pld-linux.org
Sat Apr 25 16:39:06 CEST 2026


commit 2a52f94b55a4af75287b160cb82cd71ea1e3714e
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Sat Apr 25 16:08:08 2026 +0200

    request_handler_server: fork per request to fix SSL handshake timeouts

 PLD_Builder/request_handler_server.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
---
diff --git a/PLD_Builder/request_handler_server.py b/PLD_Builder/request_handler_server.py
index ec75330..74b90e1 100644
--- a/PLD_Builder/request_handler_server.py
+++ b/PLD_Builder/request_handler_server.py
@@ -11,10 +11,18 @@ import os
 from config import config, init_conf
 
 from http.server import BaseHTTPRequestHandler, HTTPServer
+from socketserver import ForkingMixIn
 
 import request_handler
 import path
 
+class ForkingHTTPServer(ForkingMixIn, HTTPServer):
+    # Each request runs in a forked child so a slow handler (GPG verify,
+    # queue locking, SRPM processing) cannot block accept() of new clients,
+    # which surfaced on TLS as _ssl.c:1015 handshake timeouts. Forking also
+    # isolates module-level mutable state (acl.current_user, etc.).
+    pass
+
 class MyHandler(BaseHTTPRequestHandler):
 
     def do_GET(self):
@@ -93,7 +101,7 @@ def main(srv_ssl=False):
             port = config.request_handler_server_ssl_port
 
         try:
-            server = HTTPServer((host, port), MyHandler)
+            server = ForkingHTTPServer((host, port), MyHandler)
             if srv_ssl:
                 context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
                 context.load_cert_chain(certfile=config.request_handler_server_ssl_cert,
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/projects/pld-builder.new.git/commitdiff/33d0188f0225eeed4f279d76812f280f6c83a2e8



More information about the pld-cvs-commit mailing list