aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/bitcompression/compression.cpp')
-rw-r--r--searchlib/src/vespa/searchlib/bitcompression/compression.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
index 0f089c60e4b..f3fc31ac8b1 100644
--- a/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
+++ b/searchlib/src/vespa/searchlib/bitcompression/compression.cpp
@@ -359,6 +359,24 @@ getParams(PostingListParams &params) const
params.clear();
}
+template <bool bigEndian>
+void
+FeatureEncodeContext<bigEndian>::pad_for_memory_map_and_flush()
+{
+ // Write some pad bits to avoid decompression readahead going past
+ // memory mapped file during search and into SIGSEGV territory.
+
+ // First pad to 64 bits alignment.
+ this->smallAlign(64);
+ writeComprBufferIfNeeded();
+
+ // Then write 128 more bits. This allows for 64-bit decoding
+ // with a readbits that always leaves a nonzero preRead
+ padBits(128);
+ this->alignDirectIO();
+ this->flush();
+ writeComprBuffer(); // Also flushes slack
+}
template <bool bigEndian>
void