From 31ad40b963ab17ef28759666cb38035ef099d793 Mon Sep 17 00:00:00 2001 From: Philip Cho Date: Wed, 27 Sep 2017 00:03:55 -0700 Subject: [PATCH] Make __del__ method idempotent (#2627) Addresses Issue #2533. --- python-package/xgboost/core.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python-package/xgboost/core.py b/python-package/xgboost/core.py index 8ae45c5bc..802e93a60 100644 --- a/python-package/xgboost/core.py +++ b/python-package/xgboost/core.py @@ -363,7 +363,9 @@ class DMatrix(object): nthread)) def __del__(self): - _check_call(_LIB.XGDMatrixFree(self.handle)) + if self.handle is not None: + _check_call(_LIB.XGDMatrixFree(self.handle)) + self.handle = None def get_float_info(self, field): """Get float property from the DMatrix. @@ -738,7 +740,9 @@ class Booster(object): self.load_model(model_file) def __del__(self): - _LIB.XGBoosterFree(self.handle) + if self.handle is not None: + _check_call(_LIB.XGBoosterFree(self.handle)) + self.handle = None def __getstate__(self): # can't pickle ctypes pointers