From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 85427452566 for ; Thu, 31 Oct 2019 12:33:28 +0300 (MSK) Date: Thu, 31 Oct 2019 12:33:26 +0300 From: Mergen Imeev Message-ID: <20191031093326.GA3276@tarantool.org> References: <71d3e28eadd9ca54d5f564ed25d4276d472d5e6d.1572432961.git.imeevma@gmail.com> <0dd15716-6130-3dc3-5019-c2228681ba08@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <0dd15716-6130-3dc3-5019-c2228681ba08@tarantool.org> Subject: Re: [Tarantool-patches] [tarantool-patches] Re: [PATCH v1 1/1] netbox: fix memleak in lbox_tuple_format_new() List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org Cc: tarantool-patches@freelists.org, tarantool-patches@dev.tarantool.org Thank you for review. I fixed the error and reworked the patch a bit. New patch below. On Wed, Oct 30, 2019 at 11:13:54PM +0100, Vladislav Shpilevoy wrote: > Hi! Thanks for the patch! > > On 30/10/2019 11:58, imeevma@tarantool.org wrote: > > Memleak appeared due to the fact that when creating a dictionary > > its reference count is 1 from the beginning. Later, when the > > dictionary is used to create tuple_format, its reference counter > > increased by 1 and it became equal to 2. After removing > > tuple_format, the reference counter for dict decreased by one, so > > it became equal to 1. Since ref counter is not equal to 0, dict > > not deleted, causing a memory leak. > > > > Closes #4588 > > --- > > src/box/lua/misc.cc | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/src/box/lua/misc.cc b/src/box/lua/misc.cc > > index 7b8b9dc..102194e 100644 > > --- a/src/box/lua/misc.cc > > +++ b/src/box/lua/misc.cc > > @@ -233,6 +233,7 @@ lbox_tuple_format_new(struct lua_State *L) > > NULL, 0, 0, dict, false, false); > > if (format == NULL) > > return luaT_error(L); > > The dict should be unreferenced regardless of tuple_format_new() > result. Now there is a leak, when format == NULL. > Fixed. > > + tuple_dictionary_unref(dict); > > return lbox_push_tuple_format(L, format); > > } > > > New patch: >From 0d5bbc6e95394cc772ab05d6af03bd1cee6c6536 Mon Sep 17 00:00:00 2001 From: Mergen Imeev Date: Wed, 30 Oct 2019 13:39:14 +0300 Subject: [PATCH] netbox: fix memory leak in connect() This patch fixes memory leak in lbox_tuple_format_new(). Closes #4588 diff --git a/src/box/lua/misc.cc b/src/box/lua/misc.cc index 7b8b9dc..79b6cfe 100644 --- a/src/box/lua/misc.cc +++ b/src/box/lua/misc.cc @@ -231,6 +231,12 @@ lbox_tuple_format_new(struct lua_State *L) struct tuple_format *format = tuple_format_new(&tuple_format_runtime->vtab, NULL, NULL, 0, NULL, 0, 0, dict, false, false); + /* + * Since dictionary reference counter is 1 from the + * beginning and after creation of the tuple_format + * increases by one, we must decrease it once. + */ + tuple_dictionary_unref(dict); if (format == NULL) return luaT_error(L); return lbox_push_tuple_format(L, format);