1
0
mirror of synced 2025-04-20 11:47:43 +03:00

Merge pull request #184 from jaspervandeven/master

Made svr_sock_ and is_running_ variables atomic
This commit is contained in:
yhirose 2019-07-05 18:53:25 -04:00 committed by GitHub
commit cb43980a70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -70,6 +70,7 @@ typedef int socket_t;
#include <string>
#include <sys/stat.h>
#include <thread>
#include <atomic>
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT
#include <openssl/err.h>
@ -285,8 +286,8 @@ private:
virtual bool read_and_close_socket(socket_t sock);
bool is_running_;
socket_t svr_sock_;
std::atomic<bool> is_running_;
std::atomic<socket_t> svr_sock_;
std::string base_dir_;
Handlers get_handlers_;
Handlers post_handlers_;
@ -1587,8 +1588,7 @@ inline bool Server::is_running() const { return is_running_; }
inline void Server::stop() {
if (is_running_) {
assert(svr_sock_ != INVALID_SOCKET);
auto sock = svr_sock_;
svr_sock_ = INVALID_SOCKET;
std::atomic<socket_t> sock (svr_sock_.exchange(INVALID_SOCKET));
detail::shutdown_socket(sock);
detail::close_socket(sock);
}