aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-06-14 15:49:39 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-06-14 15:49:39 +0200
commitc207388764cc798dc2cc193633de21af68cc744b (patch)
treebf060efaeede59602d2bfb9a919de85e5def7369
parent0aa083b5eb0cba5d8647c6d40e1fd248d5f038ca (diff)
Use modern c++ thread_local
-rw-r--r--document/src/vespa/document/util/zstdcompressor.cpp26
1 files changed, 6 insertions, 20 deletions
diff --git a/document/src/vespa/document/util/zstdcompressor.cpp b/document/src/vespa/document/util/zstdcompressor.cpp
index b026484dc7f..9bd049fee66 100644
--- a/document/src/vespa/document/util/zstdcompressor.cpp
+++ b/document/src/vespa/document/util/zstdcompressor.cpp
@@ -30,15 +30,8 @@ private:
ZSTD_DCtx * _ctx;
};
-__thread CompressContext * _tlCompressState = nullptr;
-__thread DecompressContext * _tlDecompressState = nullptr;
-
-
-using CompressStateUP = std::unique_ptr<CompressContext>;
-using DecompressStateUP = std::unique_ptr<DecompressContext>;
-vespalib::Lock _G_Mutex;
-std::vector<CompressStateUP> _G_compressRegistry;
-std::vector<DecompressStateUP> _G_decompressRegistry;
+thread_local std::unique_ptr<CompressContext> _tlCompressState;
+thread_local std::unique_ptr<DecompressContext> _tlDecompressState;
}
@@ -48,27 +41,20 @@ bool
ZStdCompressor::process(const CompressionConfig& config, const void * inputV, size_t inputLen, void * outputV, size_t & outputLenV)
{
size_t maxOutputLen = ZSTD_compressBound(inputLen);
- if (_tlCompressState == nullptr) {
- vespalib::LockGuard guard(_G_Mutex);
- CompressStateUP context = std::make_unique<CompressContext>();
- _tlCompressState = context.get();
- _G_compressRegistry.push_back(std::move(context));
+ if ( ! _tlCompressState) {
+ _tlCompressState = std::make_unique<CompressContext>();
}
size_t sz = ZSTD_compressCCtx(_tlCompressState->get(), outputV, maxOutputLen, inputV, inputLen, config.compressionLevel);
assert( ! ZSTD_isError(sz) );
outputLenV = sz;
return ! ZSTD_isError(sz);
-
}
bool
ZStdCompressor::unprocess(const void * inputV, size_t inputLen, void * outputV, size_t & outputLenV)
{
- if (_tlDecompressState == nullptr) {
- vespalib::LockGuard guard(_G_Mutex);
- DecompressStateUP context = std::make_unique<DecompressContext>();
- _tlDecompressState = context.get();
- _G_decompressRegistry.push_back(std::move(context));
+ if ( ! _tlDecompressState) {
+ _tlDecompressState = std::make_unique<DecompressContext>();
}
size_t sz = ZSTD_decompressDCtx(_tlDecompressState->get(), outputV, outputLenV, inputV, inputLen);
assert( ! ZSTD_isError(sz) );