diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-03-13 13:10:08 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-03-13 13:10:08 +0000 |
commit | a59edb3ea9b98105528f7544094e7ccae63f883c (patch) | |
tree | 5054f3ed5c03c153a735bbc7a57d46b5c42de90d | |
parent | 8ad3f6f9fc210ced8915275f795c660fe87ef4a4 (diff) |
Properly propagate hold list and free list settings when creating new state.
-rw-r--r-- | vespalib/src/vespa/vespalib/datastore/datastorebase.cpp | 21 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/datastore/datastorebase.h | 1 |
2 files changed, 12 insertions, 10 deletions
diff --git a/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp b/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp index a0c5e282f9a..a9406fa7cde 100644 --- a/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp +++ b/vespalib/src/vespa/vespalib/datastore/datastorebase.cpp @@ -94,6 +94,7 @@ DataStoreBase::DataStoreBase(uint32_t numBuffers, uint32_t offset_bits, size_t m _hold_buffer_count(0u), _offset_bits(offset_bits), _freeListsEnabled(false), + _disableElemHoldList(false), _initializing(false) { } @@ -334,15 +335,6 @@ DataStoreBase::disableFreeLists() } void -DataStoreBase::enableFreeList(uint32_t bufferId) -{ - BufferState &state = getBufferState(bufferId); - if (_freeListsEnabled && state.isActive() && !state.getCompacting()) { - state.enable_free_list(_free_lists[state.getTypeId()]); - } -} - -void DataStoreBase::disableElemHoldList() { for (const auto& buffer : _buffers) { @@ -351,6 +343,7 @@ DataStoreBase::disableElemHoldList() state->disableElemHoldList(); } } + _disableElemHoldList = true; } MemoryStats @@ -426,6 +419,12 @@ DataStoreBase::onActive(uint32_t bufferId, uint32_t typeId, size_t elemsNeeded) BufferState *state = bufferMeta.get_state_relaxed(); if (state == nullptr) { BufferState & newState = _stash.create<BufferState>(); + if (_disableElemHoldList) { + newState.disableElemHoldList(); + } + if ( ! _freeListsEnabled) { + newState.disable_free_list(); + } state = & newState; bufferMeta.set_state(state); _bufferIdLimit.store(bufferId + 1); @@ -434,7 +433,9 @@ DataStoreBase::onActive(uint32_t bufferId, uint32_t typeId, size_t elemsNeeded) state->onActive(bufferId, typeId, _typeHandlers[typeId], elemsNeeded, bufferMeta.get_atomic_buffer()); bufferMeta.setTypeId(typeId); bufferMeta.setArraySize(state->getArraySize()); - enableFreeList(bufferId); + if (_freeListsEnabled && state->isActive() && !state->getCompacting()) { + state->enable_free_list(_free_lists[state->getTypeId()]); + } } void diff --git a/vespalib/src/vespa/vespalib/datastore/datastorebase.h b/vespalib/src/vespa/vespalib/datastore/datastorebase.h index fd5b97503c9..186d8611194 100644 --- a/vespalib/src/vespa/vespalib/datastore/datastorebase.h +++ b/vespalib/src/vespa/vespalib/datastore/datastorebase.h @@ -265,6 +265,7 @@ private: uint32_t _hold_buffer_count; const uint8_t _offset_bits; bool _freeListsEnabled; + bool _disableElemHoldList; bool _initializing; }; |