From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng1.m.smailru.net (smtpng1.m.smailru.net [94.100.181.251]) (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 ACA29442BB1 for ; Sat, 21 Mar 2020 00:35:12 +0300 (MSK) Date: Sat, 21 Mar 2020 00:28:54 +0300 From: Igor Munkin Message-ID: <20200320212854.GB22874@tarantool.org> References: <20200319145310.GK6392@tarantool.org> <20200319225339.GO6392@tarantool.org> <20200320104823.GQ6392@tarantool.org> <19736aa3-aa20-e56a-8ea5-4a40f6c4c8e4@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <19736aa3-aa20-e56a-8ea5-4a40f6c4c8e4@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH v2 2/3] fio: close unused descriptors automatically List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladislav Shpilevoy Cc: tarantool-patches@dev.tarantool.org Vlad, Great, thanks! LGTM. On 20.03.20, Vladislav Shpilevoy wrote: > >> diff --git a/src/lua/fio.lua b/src/lua/fio.lua > >> index 4692e1026..d3c257b88 100644 > >> --- a/src/lua/fio.lua > >> +++ b/src/lua/fio.lua > > > > > > > >> @@ -160,7 +165,22 @@ fio_methods.stat = function(self) > >> return internal.fstat(self.fh) > >> end > >> > >> -local fio_mt = { __index = fio_methods } > >> +fio_methods.__serialize = function(self) > >> + return {fh = self.fh} > >> +end > >> + > >> +local fio_mt = { > >> + __index = fio_methods, > >> + __gc = function(obj) > >> + if obj.fh >= 0 then > > > > Considering the current semantics of fio_methods.close (I added the code > > below) if internal.close fails, retry is not triggered in __gc mm due to > > the condition above. I guess you just missed to fix it here (you hoisted > > the error handling in the previous patch). > > Yeah, I knew :) I just didn't want to touch this place. > But ok, here is a separate commit to fix this thing, since it > existed before my patch, and is an independent bug. > > ==================== > > commit 1dcd0e6ffb1916d38b374f6df634dfcf3c0a40bc > Author: Vladislav Shpilevoy > Date: Fri Mar 20 22:20:20 2020 +0100 > > fio: on close() don't loose fd if internal close fails > > File descriptor was set to -1 regardless of whether > the object was closed properly. As a result, in case > of an error the descriptor would leak. > > GC finalizer of a descriptor is left intact not to > overcomplicate it. > > diff --git a/src/lua/fio.lua b/src/lua/fio.lua > index d3c257b88..83fddaa0a 100644 > --- a/src/lua/fio.lua > +++ b/src/lua/fio.lua > @@ -146,10 +146,10 @@ end > > fio_methods.close = function(self) > local res, err = internal.close(self.fh) > - self.fh = -1 > if err ~= nil then > return false, err > end > + self.fh = -1 > return res > end > -- Best regards, IM