From c817f21bad61c366a3798abccfe3b62e6eb9209d Mon Sep 17 00:00:00 2001 From: searchivarius Date: Wed, 19 Jun 2019 05:13:47 -0400 Subject: [PATCH] Memory leak fix #398 --- python_bindings/nmslib.cc | 13 +++++++------ python_bindings/setup.py | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/python_bindings/nmslib.cc b/python_bindings/nmslib.cc index add5588..527e5a6 100644 --- a/python_bindings/nmslib.cc +++ b/python_bindings/nmslib.cc @@ -60,7 +60,7 @@ template void exportIndex(py::module * m); template std::string distName(); AnyParams loadParams(py::object o); void exportLegacyAPI(py::module * m); -void freeObjectVector(ObjectVector * data); +void freeAndClearObjectVector(ObjectVector& data); // Wrap a space/objectvector/index together for ease of use template @@ -101,7 +101,7 @@ struct IndexWrapper { index.reset(factory.CreateMethod(print_progress, method, space_type, *space, data)); if (load_data) { vector dummy; - data.clear(); + freeAndClearObjectVector(data); space->ReadObjectVectorFromBinData(data, dummy, filename + data_suff); } index->LoadIndex(filename); @@ -156,7 +156,7 @@ struct IndexWrapper { }); // TODO(@benfred): some sort of RAII auto-destroy for this - freeObjectVector(&queries); + freeAndClearObjectVector(queries); } py::list ret; @@ -362,7 +362,7 @@ struct IndexWrapper { // In cases when the interpreter was shutting down, attempting to log in python // could throw an exception (https://github.com/nmslib/nmslib/issues/327). //LOG(LIB_DEBUG) << "Destroying Index"; - freeObjectVector(&data); + freeAndClearObjectVector(data); } std::string method; @@ -657,10 +657,11 @@ template <> std::string distName() { return "Int"; } template <> std::string distName() { return "Float"; } template <> std::string distName() { return "Double"; } -void freeObjectVector(ObjectVector * data) { - for (auto datum : *data) { +void freeAndClearObjectVector(ObjectVector& data) { + for (auto datum : data) { delete datum; } + data.clear(); } AnyParams loadParams(py::object o) { diff --git a/python_bindings/setup.py b/python_bindings/setup.py index 4a0c9e8..cc81075 100755 --- a/python_bindings/setup.py +++ b/python_bindings/setup.py @@ -4,7 +4,7 @@ import sys import setuptools -__version__ = '1.8' +__version__ = '1.8.1' libdir = os.path.join(".", "nmslib", "similarity_search") if not os.path.isdir(libdir) and sys.platform.startswith("win"):