diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-02-07 18:10:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-07 18:10:59 +0100 |
commit | 140abb1602c1788684ebf0401d1bcaca40cbe407 (patch) | |
tree | 949b4a5e5fddf947a013ba0295d93c22af86e6da | |
parent | 280691536500ad257fcb345d848373624af45988 (diff) | |
parent | 33ebf233973d3a7ba460e80dda15ef1a7678bec1 (diff) |
Merge pull request #4960 from vespa-engine/balder/safe-guard-the-tls-instance
Safeguard the tls instance
-rw-r--r-- | searchlib/src/vespa/searchlib/transactionlog/translogserverapp.cpp | 24 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h | 3 |
2 files changed, 20 insertions, 7 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.cpp index ff4a402b438..3c964c2a04d 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.cpp @@ -12,7 +12,8 @@ namespace search::transactionlog { TransLogServerApp::TransLogServerApp(const config::ConfigUri & tlsConfigUri, const FileHeaderContext & fileHeaderContext) - : _tls(), + : _lock(), + _tls(), _tlsConfig(), _tlsConfigFetcher(tlsConfigUri.getContext()), _fileHeaderContext(fileHeaderContext) @@ -23,7 +24,8 @@ TransLogServerApp::TransLogServerApp(const config::ConfigUri & tlsConfigUri, namespace { -DomainPart::Crc getCrc(searchlib::TranslogserverConfig::Crcmethod crcType) +DomainPart::Crc +getCrc(searchlib::TranslogserverConfig::Crcmethod crcType) { switch (crcType) { case searchlib::TranslogserverConfig::ccitt_crc32: @@ -36,11 +38,14 @@ DomainPart::Crc getCrc(searchlib::TranslogserverConfig::Crcmethod crcType) } -void TransLogServerApp::start() +void +TransLogServerApp::start() { std::shared_ptr<searchlib::TranslogserverConfig> c = _tlsConfig.get(); - _tls.reset(new TransLogServer(c->servername, c->listenport, c->basedir, _fileHeaderContext, - c->filesizemax, c->maxthreads, getCrc(c->crcmethod))); + auto tls = std::make_shared<TransLogServer>(c->servername, c->listenport, c->basedir, _fileHeaderContext, + c->filesizemax, c->maxthreads, getCrc(c->crcmethod)); + std::lock_guard<std::mutex> guard(_lock); + _tls = std::move(tls); } TransLogServerApp::~TransLogServerApp() @@ -48,11 +53,18 @@ TransLogServerApp::~TransLogServerApp() _tlsConfigFetcher.close(); } -void TransLogServerApp::configure(std::unique_ptr<searchlib::TranslogserverConfig> cfg) +void +TransLogServerApp::configure(std::unique_ptr<searchlib::TranslogserverConfig> cfg) { LOG(config, "configure Transaction Log Server %s at port %d", cfg->servername.c_str(), cfg->listenport); _tlsConfig.set(cfg.release()); _tlsConfig.latch(); } +TransLogServer::SP +TransLogServerApp::getTransLogServer() const { + std::lock_guard<std::mutex> guard(_lock); + return _tls; +} + } diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h index 35fa994d1e4..d46805c105c 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h @@ -14,6 +14,7 @@ namespace search::transactionlog { class TransLogServerApp : public config::IFetcherCallback<searchlib::TranslogserverConfig> { private: + mutable std::mutex _lock; TransLogServer::SP _tls; vespalib::PtrHolder<searchlib::TranslogserverConfig> _tlsConfig; config::ConfigFetcher _tlsConfigFetcher; @@ -28,7 +29,7 @@ public: const common::FileHeaderContext &fileHeaderContext); ~TransLogServerApp(); - TransLogServer::SP getTransLogServer() const { return _tls; } + TransLogServer::SP getTransLogServer() const; void start(); }; |