From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 8ED1F6EC55; Wed, 8 Sep 2021 21:21:36 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 8ED1F6EC55 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1631125296; bh=UkH6gXBwWMR95pJhI0Umb/BMJlA41jOXTsJ+n/iu03E=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=PLcTU4qRnE0r7b8wRmxy9dmojr4J6k+pl93kNEN4YoBqLClfc4BVsvzP1nrPrYptD n1SC+N2MD6/cXch40px3zbD/uXUz2NYvKCTTtnP13jjsyXbLZth2cXDSyj741bwXNB VG+4gT4DiP2hwgWj2xoZPl9/ddSrFaiSNYGIJz3M= Received: from smtp37.i.mail.ru (smtp37.i.mail.ru [94.100.177.97]) (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 26A3D6E44D for ; Wed, 8 Sep 2021 21:20:06 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 26A3D6E44D Received: by smtp37.i.mail.ru with esmtpa (envelope-from ) id 1mO2B3-0003tR-4E; Wed, 08 Sep 2021 21:20:05 +0300 To: v.shpilevoy@tarantool.org, imun@tarantool.org Date: Wed, 8 Sep 2021 21:20:01 +0300 Message-Id: <450a1c00942e91454f91848291f30f7d2fbb8f8f.1631124536.git.babinoleg@mail.ru> X-Mailer: git-send-email 2.32.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-4EC0790: 10 X-7564579A: B8F34718100C35BD X-77F55803: 4F1203BC0FB41BD91AE02D33A9C88A2F7631404A3C5D35349DE4D58F47F062C400894C459B0CD1B9EAB9801818D9592E9E6BB7C6300DF74394E6721A1D1978B76941F327F1033F36 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7EB05B7739F1E6D56EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F790063766C9C3EB94AE7C6E8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D89663AEEEED142A2D7F1C0646233967ED117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCE96A3A8AAADC8934A471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F4460429728776938767073520CCD848CCB6FE560CF04B652EEC242312D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EEB28585415E75ADA986A01F665E7D37C5D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE35FF72824B19451C603F1AB874ED89028C4224003CC836476EA7A3FFF5B025636E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F79006376A91CFDE938F542CEFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458F0AFF96BAACF4158235E5A14AD4A4A4625E192CAD1D9E79D2AE6C3BEB5DE9A2661303C88D368A663 X-C1DE0DAB: C20DE7B7AB408E4181F030C43753B8186998911F362727C414F749A5E30D975CBF3286B3348795C6F29B0CDC8BBFC443F2EA49506975C4719C2B6934AE262D3EE7EAB7254005DCED7532B743992DF240BDC6A1CF3F042BAD6DF99611D93F60EFCCE3E035A672CDEE699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34B8CF715B894FC7116846384682CDC5426016608EC92145557F11EFB436B9E86998CC5ACAC1CE90881D7E09C32AA3244CF5A5E689BD6782BACAC2A03F556C0A99F522A1CF68F4BE05927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojV8xpaxME9p+Y7V+3Yb8+sQ== X-Mailru-Sender: 583F1D7ACE8F49BD1042885CEC987B6B74342559F1471A1B6308C6D922E0EC0752685D71546B8E9E7019711D9D5B048E1458020726E2BC9FD5ECBA0B92C0A936CDC7563AA7CEBD287402F9BA4338D657ED14614B50AE0675 X-Mras: Ok Subject: [Tarantool-patches] [PATCH v4 3/4] fiber: correctly initialize storage_ref value X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Oleg Babin via Tarantool-patches Reply-To: olegrok@tarantool.org Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" From: Oleg Babin Before this patch we used an assumption in lua fiber code that all valid lua refs are positive numbers. However there are special constants defined in lua header for such purpose LUA_NOREF and LUA_REFNIL [1]. This patch introduces special value in fiber module that is equal to LUA_REFNIL to be sure that this value will be correct in future static assert is added. Also this patch introduces several usages of this value - let's make fiber code more clearer and start to initialize ref values with LUA_NOREF value. Also it will be needed for future changes. [1] https://pgl.yoyo.org/luai/i/luaL_ref --- src/lib/core/fiber.c | 2 ++ src/lib/core/fiber.h | 2 ++ src/lua/fiber.c | 7 +++---- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c index 588b78504..b7699372a 100644 --- a/src/lib/core/fiber.c +++ b/src/lib/core/fiber.c @@ -895,6 +895,7 @@ fiber_recycle(struct fiber *fiber) fiber->f = NULL; fiber->wait_pad = NULL; memset(&fiber->storage, 0, sizeof(fiber->storage)); + fiber->storage.lua.storage_ref = FIBER_LUA_NOREF; unregister_fid(fiber); fiber->fid = 0; region_free(&fiber->gc); @@ -1236,6 +1237,7 @@ fiber_new_ex(const char *name, const struct fiber_attr *fiber_attr, return NULL; } memset(fiber, 0, sizeof(struct fiber)); + fiber->storage.lua.storage_ref = FIBER_LUA_NOREF; if (fiber_stack_create(fiber, &cord()->slabc, fiber_attr->stack_size)) { diff --git a/src/lib/core/fiber.h b/src/lib/core/fiber.h index 593847df7..9584b1611 100644 --- a/src/lib/core/fiber.h +++ b/src/lib/core/fiber.h @@ -45,6 +45,8 @@ #include +#define FIBER_LUA_NOREF (-2) + /* * Fiber top doesn't work on ARM processors at the moment, * because we haven't chosen an alternative to rdtsc. diff --git a/src/lua/fiber.c b/src/lua/fiber.c index 5575f2079..96aa73b19 100644 --- a/src/lua/fiber.c +++ b/src/lua/fiber.c @@ -38,7 +38,7 @@ #include #include -#include +static_assert(FIBER_LUA_NOREF == LUA_NOREF, "FIBER_LUA_NOREF is ok"); void luaL_testcancel(struct lua_State *L) @@ -683,9 +683,8 @@ lbox_fiber_on_stop(struct trigger *trigger, void *event) { struct fiber *f = (struct fiber *) event; int storage_ref = f->storage.lua.storage_ref; - assert(storage_ref > 0); luaL_unref(tarantool_L, LUA_REGISTRYINDEX, storage_ref); - f->storage.lua.storage_ref = LUA_NOREF; + f->storage.lua.storage_ref = FIBER_LUA_NOREF; trigger_clear(trigger); free(trigger); return 0; @@ -696,7 +695,7 @@ lbox_fiber_storage(struct lua_State *L) { struct fiber *f = lbox_checkfiber(L, 1); int storage_ref = f->storage.lua.storage_ref; - if (storage_ref <= 0) { + if (storage_ref == FIBER_LUA_NOREF) { struct trigger *t = (struct trigger *) malloc(sizeof(*t)); if (t == NULL) { -- 2.32.0