From e53acf799ac87c4f4d98c5985bb8a4761e0c5d10 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Sat, 22 Mar 2025 16:39:32 -0500 Subject: [PATCH] prevent overlapping api ports --- repertory/librepertory/src/rpc/server/server.cpp | 7 +++++-- repertory/repertory/include/cli/mount.hpp | 6 +++++- repertory/repertory/src/ui/handlers.cpp | 2 ++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/repertory/librepertory/src/rpc/server/server.cpp b/repertory/librepertory/src/rpc/server/server.cpp index 97cf859f..f69bf963 100644 --- a/repertory/librepertory/src/rpc/server/server.cpp +++ b/repertory/librepertory/src/rpc/server/server.cpp @@ -143,8 +143,11 @@ void server::start() { initialize(*server_); - server_thread_ = std::make_unique( - [this]() { server_->listen("127.0.0.1", config_.get_api_port()); }); + fmt::println("port|{}", config_.get_api_port()); + server_thread_ = std::make_unique([this]() { + server_->set_socket_options([](auto && /* sock */) {}); + server_->listen("127.0.0.1", config_.get_api_port()); + }); event_system::instance().raise(function_name, "server"); } diff --git a/repertory/repertory/include/cli/mount.hpp b/repertory/repertory/include/cli/mount.hpp index 556d3181..d1c5c8ce 100644 --- a/repertory/repertory/include/cli/mount.hpp +++ b/repertory/repertory/include/cli/mount.hpp @@ -98,7 +98,7 @@ mount(std::vector args, std::string data_directory, #endif // defined(_WIN32) lock_data global_lock(provider_type::unknown, "global"); - lock_result = global_lock.grab_lock(); + lock_result = global_lock.grab_lock(100U); if (lock_result != lock_result::success) { std::cerr << "FATAL: Unable to get global lock" << std::endl; return exit_code::lock_failed; @@ -112,6 +112,7 @@ mount(std::vector args, std::string data_directory, std::cerr << "FATAL: Unable to get available port" << std::endl; return exit_code::startup_exception; } + fmt::println("port|{}", port); config.set_api_port(port); } @@ -168,6 +169,7 @@ mount(std::vector args, std::string data_directory, std::cerr << "failed to set mount state" << std::endl; } + global_lock.release(); mount_result = drive.mount(drive_args); return exit_code::mount_result; } catch (const std::exception &e) { @@ -188,6 +190,8 @@ mount(std::vector args, std::string data_directory, if (not lock.set_mount_state(true, "", -1)) { std::cerr << "failed to set mount state" << std::endl; } + + global_lock.release(); mount_result = drive.mount(drive_args); return exit_code::mount_result; } catch (const std::exception &e) { diff --git a/repertory/repertory/src/ui/handlers.cpp b/repertory/repertory/src/ui/handlers.cpp index 17b3d0e8..acc32c03 100644 --- a/repertory/repertory/src/ui/handlers.cpp +++ b/repertory/repertory/src/ui/handlers.cpp @@ -109,6 +109,8 @@ handlers::handlers(mgmt_app_config *config, httplib::Server *server) server_(server) { REPERTORY_USES_FUNCTION_NAME(); + server->set_socket_options([](auto && /* sock */) {}); + server_->set_pre_routing_handler( [this](const httplib::Request &req, auto &&res) -> httplib::Server::HandlerResponse {