diff --git a/src/spice2x/api/controller.cpp b/src/spice2x/api/controller.cpp index c437ba8c..d1400e61 100644 --- a/src/spice2x/api/controller.cpp +++ b/src/spice2x/api/controller.cpp @@ -93,6 +93,7 @@ Controller::Controller(unsigned short port, std::string password, bool pretty) // bind socket to address if (bind(this->server, (sockaddr *) &server_address, sizeof(sockaddr)) == -1) { log_warning("api", "could not bind socket on port {}: {}", port, get_last_error_string()); + closesocket(this->server); this->server = INVALID_SOCKET; if (!cfg::CONFIGURATOR_STANDALONE) { log_fatal("api", "failed to start server"); @@ -103,6 +104,7 @@ Controller::Controller(unsigned short port, std::string password, bool pretty) // set socket to listen if (listen(this->server, server_backlog) == -1) { log_warning("api", "could not listen to socket on port {}: {}", port, get_last_error_string()); + closesocket(this->server); this->server = INVALID_SOCKET; if (!cfg::CONFIGURATOR_STANDALONE) { log_fatal("api", "failed to start server"); @@ -446,7 +448,9 @@ void Controller::free_socket() { this->server = INVALID_SOCKET; } - this->websocket->free_socket(); + if (this->websocket) { + this->websocket->free_socket(); + } for (auto &s : this->serial) { s->free_port(); diff --git a/src/spice2x/api/controller.h b/src/spice2x/api/controller.h index 5413f44e..7a4a356f 100644 --- a/src/spice2x/api/controller.h +++ b/src/spice2x/api/controller.h @@ -41,21 +41,21 @@ namespace api { bool pretty; // server - WebSocketController *websocket; + WebSocketController *websocket = nullptr; std::vector serial; std::vector server_workers; std::vector server_handlers; std::mutex server_handlers_m; std::vector client_states; std::mutex client_states_m; - SOCKET server; + SOCKET server = INVALID_SOCKET; void server_worker(); void connection_handler(ClientState client_state); public: // state - bool server_running; + bool server_running = false; // constructor / destructor Controller(unsigned short port, std::string password, bool pretty); diff --git a/src/spice2x/sdk/sdk.cpp b/src/spice2x/sdk/sdk.cpp index e61bd059..5677ded6 100644 --- a/src/spice2x/sdk/sdk.cpp +++ b/src/spice2x/sdk/sdk.cpp @@ -225,6 +225,7 @@ sdk_log( log_warning(facility_str.c_str(), "{}", message); break; case SPICE_SDK_LOG_LEVEL_FATAL: + lock.unlock(); log_fatal(facility_str.c_str(), "{}", message); break; default: