Skip to content

Commit

Permalink
fixed a mem leak in columnar storage for RT indexes
Browse files Browse the repository at this point in the history
  • Loading branch information
glookka committed Apr 6, 2022
1 parent 903afdf commit 4031d38
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/columnarrt.cpp
Expand Up @@ -504,6 +504,7 @@ class ColumnarRT_c : public ColumnarRT_i
public:
ColumnarRT_c() = default;
ColumnarRT_c ( const CSphSchema & tSchema, ColumnarBuilderRT_i * pBuilder, bool bTakeOwnership );
~ColumnarRT_c() override;

columnar::Iterator_i * CreateIterator ( const std::string & sName, const columnar::IteratorHints_t & tHints, columnar::IteratorCapabilities_t * pCapabilities, std::string & sError ) const override;
std::vector<columnar::BlockIterator_i *> CreateAnalyzerOrPrefilter ( const std::vector<columnar::Filter_t> & dFilters, std::vector<int> & dDeletedFilters, const columnar::BlockTester_i & tBlockTester ) const override { return {}; }
Expand All @@ -519,6 +520,7 @@ class ColumnarRT_c : public ColumnarRT_i
bool Load ( CSphReader & tReader, const CSphSchema & tSchema, CSphString & sError );

private:
bool m_bOwnAttrs = true;
CSphVector<ColumnarAttrRT_i*> m_dAttrs;
SmallStringHash_T<std::pair<ColumnarAttrRT_i*,int>> m_hAttrs;

Expand All @@ -528,7 +530,8 @@ class ColumnarRT_c : public ColumnarRT_i

ColumnarRT_c::ColumnarRT_c ( const CSphSchema & tSchema, ColumnarBuilderRT_i * pBuilder, bool bTakeOwnership )
{
if ( bTakeOwnership )
m_bOwnAttrs = bTakeOwnership;
if ( m_bOwnAttrs )
m_dAttrs = std::move ( pBuilder->GetAttrs() );
else
m_dAttrs = pBuilder->GetAttrs();
Expand All @@ -537,6 +540,13 @@ ColumnarRT_c::ColumnarRT_c ( const CSphSchema & tSchema, ColumnarBuilderRT_i * p
}


ColumnarRT_c::~ColumnarRT_c()
{
if ( m_bOwnAttrs )
m_dAttrs.for_each( []( auto & i ){ SafeDelete(i); } );
}


columnar::Iterator_i * ColumnarRT_c::CreateIterator ( const std::string & sName, const columnar::IteratorHints_t & tHints, columnar::IteratorCapabilities_t * pCapabilities, std::string & sError ) const
{
auto * pFound = m_hAttrs ( sName.c_str() );
Expand Down

0 comments on commit 4031d38

Please sign in to comment.