From 01611177f77f003333b66a0e42b43bb968977605 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Mon, 29 Jul 2019 18:07:35 -0700 Subject: [PATCH] Fix memory leaks in expire_func introduced by recent changes --- src/Val.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Val.cc b/src/Val.cc index c84dd426f0..14008afde9 100644 --- a/src/Val.cc +++ b/src/Val.cc @@ -2318,23 +2318,28 @@ double TableVal::CallExpireFunc(Val* idx) { if ( ! any_idiom ) { - const val_list* vl0 = idx->AsListVal()->Vals(); for ( const auto& v : *idx->AsListVal()->Vals() ) vl.append(v->Ref()); + + Unref(idx); } else { ListVal* idx_list = idx->AsListVal(); // Flatten if only one element - if (idx_list->Length() == 1) - idx = idx_list->Index(0); + if ( idx_list->Length() == 1 ) + { + Val* old = idx; + idx = idx_list->Index(0)->Ref(); + Unref(old); + } - vl.append(idx->Ref()); + vl.append(idx); } } else { - vl.append(idx->Ref()); + vl.append(idx); } Val* result = 0;