diff --git a/src/collection/backend/lmdb.cc b/src/collection/backend/lmdb.cc index a4c79b78..f798375f 100644 --- a/src/collection/backend/lmdb.cc +++ b/src/collection/backend/lmdb.cc @@ -188,6 +188,7 @@ std::string* LMDB::resolveFirst(const std::string& var) { goto end_get; } + //FIXME: Memory leak here. ret = new std::string( reinterpret_cast(mdb_value_ret.mv_data), mdb_value_ret.mv_size); @@ -289,7 +290,9 @@ void LMDB::resolveSingleMatch(const std::string& var, std::string *a = new std::string( reinterpret_cast(mdb_value_ret.mv_data), mdb_value_ret.mv_size); - l->push_back(new Variable(var, *a)); + Variable *v = new Variable(&var, a); + v->m_dynamic_value = true; + l->push_back(v); } mdb_cursor_close(cursor); @@ -502,10 +505,13 @@ void LMDB::resolveMultiMatches(const std::string& var, if (strncmp(var.c_str(), a, keySize) != 0) { continue; } - l->insert(l->begin(), new Variable( - std::string(reinterpret_cast(key.mv_data), key.mv_size), - std::string(reinterpret_cast(data.mv_data), - data.mv_size))); + Variable *v = new Variable( + new std::string(reinterpret_cast(key.mv_data), + key.mv_size), + new std::string(reinterpret_cast(data.mv_data), + data.mv_size)); + v->m_dynamic_value = true; + l->insert(l->begin(), v); } mdb_cursor_close(cursor); @@ -593,10 +599,13 @@ void LMDB::resolveRegularExpression(const std::string& var, continue; } - l->insert(l->begin(), new Variable( - std::string(reinterpret_cast(key.mv_data), key.mv_size), - std::string(reinterpret_cast(data.mv_data), - data.mv_size))); + Variable *v = new Variable( + new std::string(reinterpret_cast(key.mv_data), + key.mv_size), + new std::string(reinterpret_cast(data.mv_data), + data.mv_size)); + v->m_dynamic_value = true; + l->insert(l->begin(), v); } mdb_cursor_close(cursor);