diff options
author | Henning Baldersheim <balder@oath.com> | 2018-05-03 16:04:39 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@oath.com> | 2018-05-03 16:04:39 +0200 |
commit | a6267f0546d61a878d531bdfe23b3bc09d71aa31 (patch) | |
tree | 529a82d25e6b850a6a6ff83119e2723ddf05d42f /searchlib | |
parent | cf9712897e9ba0bb10ec04ce4305e7646c3e70be (diff) |
Use std::shared_ptr for large blobs.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/docstore/visitcache.cpp | 16 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/docstore/visitcache.h | 4 |
2 files changed, 11 insertions, 9 deletions
diff --git a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp index 7e881d8de76..a3fc171eef2 100644 --- a/searchlib/src/vespa/searchlib/docstore/visitcache.cpp +++ b/searchlib/src/vespa/searchlib/docstore/visitcache.cpp @@ -38,7 +38,7 @@ BlobSet::BlobSet() : _buffer(Alloc::alloc(0, 16 * MemoryAllocator::HUGEPAGE_SIZE), 0) { } -BlobSet::~BlobSet() {} +BlobSet::~BlobSet() = default; namespace { @@ -80,7 +80,7 @@ CompressedBlobSet::CompressedBlobSet() : { } -CompressedBlobSet::~CompressedBlobSet() { } +CompressedBlobSet::~CompressedBlobSet() = default; CompressedBlobSet::CompressedBlobSet(const CompressionConfig &compression, const BlobSet & uncompressed) : @@ -92,8 +92,10 @@ CompressedBlobSet::CompressedBlobSet(const CompressionConfig &compression, const DataBuffer compressed; ConstBufferRef org = uncompressed.getBuffer(); _compression = vespalib::compression::compress(compression, org, compressed, false); - _buffer.resize(compressed.getDataLen()); - memcpy(_buffer, compressed.getData(), compressed.getDataLen()); + _buffer = std::make_shared<vespalib::MallocPtr>(compressed.getDataLen()); + memcpy(*_buffer, compressed.getData(), compressed.getDataLen()); + } else { + _buffer = std::make_shared<vespalib::MallocPtr>(); } } @@ -105,13 +107,13 @@ CompressedBlobSet::getBlobSet() const DataBuffer uncompressed(0, 1, Alloc::alloc(0, 16 * MemoryAllocator::HUGEPAGE_SIZE)); if ( ! _positions.empty() ) { decompress(_compression, getBufferSize(_positions), - ConstBufferRef(_buffer.c_str(), _buffer.size()), uncompressed, false); + ConstBufferRef(_buffer->c_str(), _buffer->size()), uncompressed, false); } return BlobSet(_positions, uncompressed.stealBuffer()); } size_t CompressedBlobSet::size() const { - return _positions.capacity() * sizeof(BlobSet::Positions::value_type) + _buffer.size(); + return _positions.capacity() * sizeof(BlobSet::Positions::value_type) + _buffer->size(); } namespace { @@ -226,7 +228,7 @@ VisitCache::Cache::Cache(BackingStore & b, size_t maxBytes) : Parent(b, maxBytes) { } -VisitCache::Cache::~Cache() { } +VisitCache::Cache::~Cache() = default; void VisitCache::Cache::removeKey(uint32_t subKey) { diff --git a/searchlib/src/vespa/searchlib/docstore/visitcache.h b/searchlib/src/vespa/searchlib/docstore/visitcache.h index effc6c19a21..5070f645557 100644 --- a/searchlib/src/vespa/searchlib/docstore/visitcache.h +++ b/searchlib/src/vespa/searchlib/docstore/visitcache.h @@ -85,8 +85,8 @@ public: BlobSet getBlobSet() const; private: CompressionConfig::Type _compression; - BlobSet::Positions _positions; - vespalib::MallocPtr _buffer; + BlobSet::Positions _positions; + std::shared_ptr<vespalib::MallocPtr> _buffer; }; /** |