Fix compile error with libstdc++ and/or --disable-threads

This commit is contained in:
Tatsuhiro Tsujikawa 2015-01-08 01:57:59 +09:00
parent b313068cab
commit 5dce9501a6
4 changed files with 28 additions and 8 deletions

View File

@ -438,7 +438,11 @@ void refresh_cb(struct ev_loop *loop, ev_timer *w, int revents) {
namespace { namespace {
void renew_ticket_key_cb(struct ev_loop *loop, ev_timer *w, int revents) { void renew_ticket_key_cb(struct ev_loop *loop, ev_timer *w, int revents) {
auto old_ticket_keys = std::atomic_load(&get_config()->ticket_keys); #ifndef NOTHREADS
std::lock_guard<std::mutex> g(mod_config()->ticket_keys_lock);
#endif // !NOTHREADS
auto old_ticket_keys = get_config()->ticket_keys;
auto ticket_keys = std::make_shared<TicketKeys>(); auto ticket_keys = std::make_shared<TicketKeys>();
if (LOG_ENABLED(INFO)) { if (LOG_ENABLED(INFO)) {
LOG(INFO) << "renew ticket key"; LOG(INFO) << "renew ticket key";
@ -461,8 +465,7 @@ void renew_ticket_key_cb(struct ev_loop *loop, ev_timer *w, int revents) {
if (LOG_ENABLED(INFO)) { if (LOG_ENABLED(INFO)) {
LOG(INFO) << "failed to renew ticket key"; LOG(INFO) << "failed to renew ticket key";
} }
std::atomic_store(&mod_config()->ticket_keys, mod_config()->ticket_keys.reset();
std::shared_ptr<TicketKeys>());
return; return;
} }
@ -473,7 +476,7 @@ void renew_ticket_key_cb(struct ev_loop *loop, ev_timer *w, int revents) {
} }
} }
std::atomic_store(&mod_config()->ticket_keys, ticket_keys); mod_config()->ticket_keys = ticket_keys;
} }
} // namespace } // namespace

View File

@ -36,6 +36,7 @@
#include <vector> #include <vector>
#include <memory> #include <memory>
#include <atomic> #include <atomic>
#include <mutex>
#include <openssl/ssl.h> #include <openssl/ssl.h>
@ -183,6 +184,7 @@ struct Config {
std::vector<LogFragment> accesslog_format; std::vector<LogFragment> accesslog_format;
std::vector<DownstreamAddr> downstream_addrs; std::vector<DownstreamAddr> downstream_addrs;
std::vector<std::string> tls_ticket_key_files; std::vector<std::string> tls_ticket_key_files;
std::mutex ticket_keys_lock;
std::shared_ptr<TicketKeys> ticket_keys; std::shared_ptr<TicketKeys> ticket_keys;
// binary form of http proxy host and port // binary form of http proxy host and port
sockaddr_union downstream_http_proxy_addr; sockaddr_union downstream_http_proxy_addr;

View File

@ -147,9 +147,18 @@ namespace {
int ticket_key_cb(SSL *ssl, unsigned char *key_name, unsigned char *iv, int ticket_key_cb(SSL *ssl, unsigned char *key_name, unsigned char *iv,
EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc) { EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int enc) {
auto handler = static_cast<ClientHandler *>(SSL_get_app_data(ssl)); auto handler = static_cast<ClientHandler *>(SSL_get_app_data(ssl));
auto ticket_keys = get_config()->auto_tls_ticket_key #ifndef NOTHREADS
? std::atomic_load(&get_config()->ticket_keys) std::shared_ptr<TicketKeys> ticket_keys;
: get_config()->ticket_keys; if (get_config()->auto_tls_ticket_key) {
std::lock_guard<std::mutex> g(mod_config()->ticket_keys_lock);
ticket_keys = get_config()->ticket_keys;
} else {
ticket_keys = get_config()->ticket_keys;
}
#else // NOTHREADS
auto ticket_keys = get_config()->ticket_keys;
#endif // NOTHREADS
if (!ticket_keys) { if (!ticket_keys) {
/* No ticket keys available. Perform full handshake */ /* No ticket keys available. Perform full handshake */
return 0; return 0;

View File

@ -66,7 +66,9 @@ Worker::~Worker() {
} }
void Worker::run() { void Worker::run() {
#ifndef NOTHREADS
fut_ = std::async(std::launch::async, [this] { this->run_loop(); }); fut_ = std::async(std::launch::async, [this] { this->run_loop(); });
#endif // !NOTHREADS
} }
void Worker::run_loop() { void Worker::run_loop() {
@ -74,7 +76,11 @@ void Worker::run_loop() {
ev_run(loop_); ev_run(loop_);
} }
void Worker::wait() { fut_.get(); } void Worker::wait() {
#ifndef NOTHREADS
fut_.get();
#endif // !NOTHREADS
}
void Worker::send(const WorkerEvent &event) { void Worker::send(const WorkerEvent &event) {
{ {