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 050056F3F2; Fri, 3 Sep 2021 23:51:03 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 050056F3F2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1630702263; bh=hfLtBSHeecNbTtELe8QR+CIHvOJ8+jgtOMnpLO1NFJA=; 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=nhZ1QtPRdEg1JXb2Oll2IGZ3LNRL26N2k1qIta4VGQ/Wa4pJ7F5oaU5XVdFpoPPyp fREAjLLY5+WcIXq5xToNYeYIKk0VQ2DS8/tcsEAaaBdNUx5ynNiDm/B4ocUx8WSpJM j2Bth7bLeUjKe67X/L81kxKcTFoSDzljJSDK7cDo= Received: from smtp29.i.mail.ru (smtp29.i.mail.ru [94.100.177.89]) (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 037AE70358 for ; Fri, 3 Sep 2021 23:49:23 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 037AE70358 Received: by smtp29.i.mail.ru with esmtpa (envelope-from ) id 1mMG7m-0007LS-0O; Fri, 03 Sep 2021 23:49:22 +0300 To: v.shpilevoy@tarantool.org, imun@tarantool.org Date: Fri, 3 Sep 2021 23:49:17 +0300 Message-Id: <1e90d3a90caed7259cec2fc117d6ff52a1d4a859.1630701714.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: 4F1203BC0FB41BD9D96C1EA41D18F4D502C758EA1710EDB6F5A7A0628E11ABA6182A05F53808504008DD2D545F3D467A4C4627D14A005895A2CE75F3835D0B9F7A821D01538C31B8 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7D6964C9E324ABA58EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006370999C8D6401250DC8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8C40A9D447B6815A7E02EFA13E5ADDB42117882F4460429724CE54428C33FAD305F5C1EE8F4F765FC5F0C88D684269EDEA471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F4460429728776938767073520B1593CA6EC85F86DC26CFBAC0749D213D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EE0AC5B80A05675ACDD94E105876FE7799D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE324D079F6B4507B169735652A29929C6CC4224003CC836476EA7A3FFF5B025636E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F7900637EC3198ECE464ADAEEFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458F0AFF96BAACF4158235E5A14AD4A4A4625E192CAD1D9E79DB8BF922E402C092CB8589C54DF99C8B7 X-C1DE0DAB: C20DE7B7AB408E4181F030C43753B8186998911F362727C414F749A5E30D975CA3881D9F5F3D43CB51C83977F727022C000C866ADEDAE2449C2B6934AE262D3EE7EAB7254005DCED7532B743992DF240BDC6A1CF3F042BAD6DF99611D93F60EFCCE3E035A672CDEE699F904B3F4130E343918A1A30D5E7FCCB5012B2E24CD356 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34C786159FDC4342B02DB0FC0DC3D94479207C3DCE945D7CE48571104481575B34E16CC91EF04318EF1D7E09C32AA3244C8B3E6A04638EB18C60F5269F9B6194BC64EE5813BBCA3A9D927AC6DF5659F194 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2bioj0HWrnICxeoo0YMvVwnAPVw== X-Mailru-Sender: 583F1D7ACE8F49BD1042885CEC987B6B23DE588AEA1184264C4627D14A0058957958A49548C749F67019711D9D5B048E1458020726E2BC9FD5ECBA0B92C0A936CDC7563AA7CEBD287402F9BA4338D657ED14614B50AE0675 X-Mras: Ok Subject: [Tarantool-patches] [PATCH v3 3/4] lua/utils: make LUA_NOREF value public 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]. Previously there was introduced public value for LUA_REFNIL - luaL_nil_ref. This patch introduces an analog for LUA_NOREF - luaL_no_ref. Also this patch introduces several usages of this value - let's make fiber code more clearer and start to intialize 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 | 3 +++ src/lua/fiber.c | 3 +-- src/lua/utils.c | 1 + test/unit/core_test_utils.c | 2 ++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/lib/core/fiber.c b/src/lib/core/fiber.c index 588b78504..21afde209 100644 --- a/src/lib/core/fiber.c +++ b/src/lib/core/fiber.c @@ -44,6 +44,7 @@ #include "errinj.h" extern void cord_on_yield(void); +extern int luaL_no_ref; #if ENABLE_FIBER_TOP #include /* __rdtscp() */ @@ -895,6 +896,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 = luaL_no_ref; unregister_fid(fiber); fiber->fid = 0; region_free(&fiber->gc); @@ -1236,6 +1238,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 = luaL_no_ref; if (fiber_stack_create(fiber, &cord()->slabc, fiber_attr->stack_size)) { diff --git a/src/lua/fiber.c b/src/lua/fiber.c index 5575f2079..6457a1428 100644 --- a/src/lua/fiber.c +++ b/src/lua/fiber.c @@ -683,7 +683,6 @@ 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; trigger_clear(trigger); @@ -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 == LUA_NOREF) { struct trigger *t = (struct trigger *) malloc(sizeof(*t)); if (t == NULL) { diff --git a/src/lua/utils.c b/src/lua/utils.c index c71cd4857..c252d7cdf 100644 --- a/src/lua/utils.c +++ b/src/lua/utils.c @@ -40,6 +40,7 @@ #include "uuid/tt_uuid.h" int luaL_nil_ref = LUA_REFNIL; +int luaL_no_ref = LUA_NOREF; static int luaT_newthread_ref = LUA_NOREF; diff --git a/test/unit/core_test_utils.c b/test/unit/core_test_utils.c index 23452bbfd..9b1789e75 100644 --- a/test/unit/core_test_utils.c +++ b/test/unit/core_test_utils.c @@ -35,3 +35,5 @@ void cord_on_yield(void) { } + +int luaL_no_ref = -2; -- 2.32.0