From 63e21c1c9a02518877be61c16260b43be6498ed1 Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Mon, 8 Jun 2026 13:21:48 -0400 Subject: [PATCH 1/2] web: update web threads when openroad threads change Signed-off-by: Peter Gadfort --- src/OpenRoad.cc | 6 ++++-- src/web/include/web/web.h | 7 +++++-- src/web/src/web.cpp | 9 ++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/OpenRoad.cc b/src/OpenRoad.cc index 030d817fc8b..dd0cc6ef50a 100644 --- a/src/OpenRoad.cc +++ b/src/OpenRoad.cc @@ -273,8 +273,7 @@ void OpenRoad::init(Tcl_Interp* tcl_interp, icewall_ = new pad::ICeWall(db_, logger_); dft_ = new dft::Dft(db_, sta_, logger_); example_ = new exa::Example(db_, logger_); - web_server_ - = new web::WebServer(db_, sta_, logger_, tcl_interp, getThreadCount()); + web_server_ = new web::WebServer(db_, sta_, logger_, tcl_interp); // Init components. Ord_Init(tcl_interp); @@ -687,6 +686,9 @@ void OpenRoad::setThreadCount(int threads, bool print_info) if (global_router_ != nullptr) { global_router_->setNumThreads(threads_); } + if (web_server_ != nullptr) { + web_server_->setThreadCount(threads_); + } } void OpenRoad::setThreadCount(const char* threads, bool print_info) diff --git a/src/web/include/web/web.h b/src/web/include/web/web.h index f2d484e6293..5c1c17253e4 100644 --- a/src/web/include/web/web.h +++ b/src/web/include/web/web.h @@ -72,8 +72,7 @@ class WebServer WebServer(odb::dbDatabase* db, sta::dbSta* sta, utl::Logger* logger, - Tcl_Interp* interp, - int num_threads); + Tcl_Interp* interp); ~WebServer(); // Register the WebLogSink with the Logger so startup output is captured @@ -84,6 +83,10 @@ class WebServer // the network threads racing the main thread's db construction. void initLogger(); + // Sets the number of thread workers for the server's I/O context. + // Must be called before serve() to take effect. + void setThreadCount(int num_threads) { num_threads_ = num_threads; } + // Start the web server on the given port. Launches background // I/O threads and returns immediately. A second call is a no-op if // the server is already running. diff --git a/src/web/src/web.cpp b/src/web/src/web.cpp index fa3ebd35a61..57bff993cf5 100644 --- a/src/web/src/web.cpp +++ b/src/web/src/web.cpp @@ -917,13 +917,8 @@ void Listener::on_accept(beast::error_code ec, Tcp::socket socket) WebServer::WebServer(odb::dbDatabase* db, sta::dbSta* sta, utl::Logger* logger, - Tcl_Interp* interp, - int num_threads) - : db_(db), - sta_(sta), - logger_(logger), - interp_(interp), - num_threads_(num_threads) + Tcl_Interp* interp) + : db_(db), sta_(sta), logger_(logger), interp_(interp), num_threads_(1) { } From cb04caf1638154f6a97757f1864c39a3af37eff7 Mon Sep 17 00:00:00 2001 From: Peter Gadfort Date: Mon, 8 Jun 2026 14:24:17 -0400 Subject: [PATCH 2/2] web: fix test setup Signed-off-by: Peter Gadfort --- src/web/test/cpp/TestSaveReport.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/web/test/cpp/TestSaveReport.cpp b/src/web/test/cpp/TestSaveReport.cpp index 18d2d7208eb..b69b1baeef0 100644 --- a/src/web/test/cpp/TestSaveReport.cpp +++ b/src/web/test/cpp/TestSaveReport.cpp @@ -85,8 +85,7 @@ class SaveReportTest : public tst::Nangate45Fixture WebServer server(getDb(), /*sta=*/nullptr, getLogger(), - /*interp=*/nullptr, - /*num_threads=*/1); + /*interp=*/nullptr); server.saveReport(path, max_setup, max_hold); }