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 BF7D66E23C; Fri, 13 Nov 2026 02:44:31 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org BF7D66E23C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1794527071; bh=+cn5YoN6kAT5VLI3DIWD4eJFxCIwG8YlKt1BUfHt4hY=; 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=eDYisPf/5d0fKpitfpRGQrpocq7/frMNp3LoLPi+tl6DEFE8+jqn4SyaYIc2ObvKl BpBbFmgIRaIReHbWFyylXrxtcRcVoU8C6Wow4z1LKMQ3+z4CWaDv6z2JSlIPOAfqAq iZKxYssdQMbkcuHBPagVU/3R2f5rgfnW9xCrgvDA= Received: from send83.i.mail.ru (send83.i.mail.ru [89.221.237.178]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 56FA96F813 for ; Fri, 13 Nov 2026 02:42:34 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 56FA96F813 Received: by exim-smtp-5cfb6649f-vjfzp with esmtpa (envelope-from ) id 1xReR7-00000000Ioc-3SD3; Fri, 13 Nov 2026 02:42:34 +0300 To: Sergey Kaplun , Sergey Bronnikov , Evgeniy Temirgaleev Date: Fri, 13 Nov 2026 02:42:25 +0300 Message-ID: X-Mailer: git-send-email 2.55.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-618D5548: 8841D53E06B81C9FC7D0F6C13AE99213664FCC181984ECD772197B577EDF39BEBF30C8D3B301E178 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9089E34853A70B9B0359681F9FC4E45696CA38AC2AF7DB4F9182A05F538085040C8A39DCDA7E5B0313DE06ABAFEAF6705171FEA79DC34CABDC4E5300F674211BB7B820C60925959D8 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7E3137013C338FE3BEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB553375661F398E59D6539FAA752F4A35C6F1D96E21BD0CFBDC08AF5B7F7FB1291953C6AD8EEF46B7454FC60B9742502CCDD46D0D0CABCCA60F52D7EBBA3038C0950A5D36D5E8D9A59859A8B6DA390B21A98FAFA63AA81AA40904B5D99C9F4D5AE37F343AD1F44FA8B9022EA23BBE47FD9DD3FB595F5C1EE8F4F765FC72CEEB2601E22B093A03B725D353964B0B7D0EA88DDEDAC722CA9DD8327EE493EFA58DFCB7B0AE11D246AA24B5346CFAC4224003CC83647689D4C264860C145E X-C1DE0DAB: 0D63561A33F958A51F231F93172C9FCA5002B1117B3ED69680A962BD31D9D67603803A57F48E4E5A823CB91A9FED034534781492E4B8EEAD3C056C6FCE5AFF8EC79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34C77DD89D51EBB774225B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D65905A37FBEA092D76C5AEF231DDEC8AAE63A127A1605732610AC2BA6E4BE2A721A05792508106555ABB8341EE9D5BE9A0A051BC339A08179A92F3E611DBA4EFD58F72E47C1C7E935199350E1BD188BD56E4C41F94D744909CE9D6718F459EE2962AE54DA86D399E591103B389C0A9E82E8 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXOcIETfglQORZ0zpDET4Zrk3igikrdHlWMEqUvd5Nog/tEW4g7DlDWI= X-Mailru-Sender: CE01F6F06FBB9B4E14759DB66A5FA98AD18BA9AA9C07DB3BB951B70A5BD4BD8E848469854B026D22F7F5837242FA16B2EAA2F645D7D0C73F8B67290C0B8F2C0D12EEFBA914E8A1CE696B58449F085A8023028798991C5DA182F85D6DCAB44FBA5FEEDEB644C299C0ED14614B50AE0675 X-Mras: Ok Subject: [Tarantool-patches] [PATCH luajit 4/4] dbg: remove wrong GC state 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: Mikhail Elhimov via Tarantool-patches Reply-To: Mikhail Elhimov Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" It was copied originally by mistake from the LuaVela fork of LuaJIT. --- src/luajit_dbg.py | 3 +- .../debug-extension-tests.py | 113 ++++++++++++++++-- 2 files changed, 104 insertions(+), 12 deletions(-) diff --git a/src/luajit_dbg.py b/src/luajit_dbg.py index db4b3f04..1c2240f4 100644 --- a/src/luajit_dbg.py +++ b/src/luajit_dbg.py @@ -1302,7 +1302,6 @@ def gc_state(g): 3: 'SWEEPSTRING', 4: 'SWEEP', 5: 'FINALIZE', - 6: 'LAST', }.get(int(g['gc']['state']), 'INVALID') @@ -2908,7 +2907,7 @@ class LJState(dbg.LJBase): lj-state The command requires no args and dumps current VM and GC states: * VM state: <{}> -* GC state: +* GC state: * JIT state: '''.format('|'.join(list(VM_STATES) + [vm_state_trace('TRACENO')])) diff --git a/test/tarantool-debugger-tests/debug-extension-tests.py b/test/tarantool-debugger-tests/debug-extension-tests.py index 9237d3f1..172ec51b 100644 --- a/test/tarantool-debugger-tests/debug-extension-tests.py +++ b/test/tarantool-debugger-tests/debug-extension-tests.py @@ -163,6 +163,23 @@ elif machine == 'arm64' or machine == 'aarch64': else: raise Exception('Unknown architecture in testing') +GCS_PAUSE = 'PAUSE' +GCS_PROPAGATE = 'PROPAGATE' +GCS_ATOMIC = 'ATOMIC' +GCS_SWEEPSTRING = 'SWEEPSTRING' +GCS_SWEEP = 'SWEEP' +GCS_FINALIZE = 'FINALIZE' + +RX_VALID_GC_STATES = r'({})'.format('|'.join([ + GCS_PAUSE, + GCS_PROPAGATE, + GCS_ATOMIC, + GCS_SWEEPSTRING, + GCS_SWEEP, + GCS_FINALIZE, +])) +RX_INVALID_GC_STATE = r'INVALID' + class TestCaseBase(unittest.TestCase): @classmethod @@ -309,23 +326,24 @@ RX_VM_STATE = r'({})'.format('|'.join([ ])) -class TestLJState(TestCaseBase): - extension_cmds = 'lj-state' - location = 'lj_cf_print' - lua_script = 'print(1)' - pattern = ( +def compose_lj_state_rx(rx_gc_state): + return ( r'VM state: ' + RX_VM_STATE + '\n' - r'GC state: [A-Z]+\n' + r'GC state: ' + rx_gc_state + '\n' r'JIT state: [A-Z]+\n' ) -class TestLJGC(TestCaseBase): - extension_cmds = 'lj-gc' +class TestLJState(TestCaseBase): + extension_cmds = 'lj-state' location = 'lj_cf_print' lua_script = 'print(1)' - pattern = ( - r'GC stats: [A-Z]+\n' + pattern = compose_lj_state_rx(RX_VALID_GC_STATES) + + +def compose_gc_stats_rx(rx_gc_state): + return ( + r'GC stats: ' + rx_gc_state + '\n' r'\ttotal: \d+\n' r'\tthreshold: \d+\n' r'\tdebt: \d+\n' @@ -341,6 +359,81 @@ class TestLJGC(TestCaseBase): ) +class TestLJGC(TestCaseBase): + extension_cmds = 'lj-gc' + location = 'lj_cf_print' + lua_script = 'print(1)' + pattern = compose_gc_stats_rx(RX_VALID_GC_STATES) + + +class TestGCStateBase(TestCaseBase): + extension_cmds = ( + 'lj-state\n' + 'lj-gc\n' + ) + + # The same lua code is used to check all the GC states because + # it allows to reach any of them: + # 1) `gc_mark_start()` (PAUSE) is always present in the full + # GC cycle. + # 2) `propagatemark()` (PROPAGATE) is reachable because our + # build has FFI and the finalizer table is marked as a weak + # table, i.e. it is gray. Hence, the g->gc.gray list is not + # empty. + # 3) `atomic()` (ATOMIC) is always present in the full GC + # cycle. + # 4) `gc_sweep_str_chain()` (SWEEPSTRING) is always present in + # the full GC cycle. + # 5) `gc_sweep()` (SWEEP) is always present in the full GC + # cycle. + # 6) `gc_finalize()` (FINALIZE) is met due to the finalizer to + # userdata in the script. + lua_script = ( + 'local obj = newproxy(true)\n' + 'getmetatable(obj).__gc = function() end\n' + 'obj = nil\n' + 'collectgarbage()\n' + ) + + @classmethod + def setUpClass(cls): + cls.pattern = ( + compose_lj_state_rx(cls.gc_state) + + compose_gc_stats_rx(cls.gc_state) + ) + super(TestGCStateBase, cls).setUpClass() + + +class TestGCStatePause(TestGCStateBase): + gc_state = GCS_PAUSE + location = 'gc_mark_start' + + +class TestGCStatePropagate(TestGCStateBase): + gc_state = GCS_PROPAGATE + location = 'propagatemark' + + +class TestGCStateAtomic(TestGCStateBase): + gc_state = GCS_ATOMIC + location = 'atomic' + + +class TestGCStateSweepString(TestGCStateBase): + gc_state = GCS_SWEEPSTRING + location = 'gc_sweep_str_chain' + + +class TestGCStateSweep(TestGCStateBase): + gc_state = GCS_SWEEP + location = 'gc_sweep' + + +class TestGCStateFinalize(TestGCStateBase): + gc_state = GCS_FINALIZE + location = 'gc_finalize' + + STACK_RX = ( r'-+ Red zone:\s+\d+ slots -+\n' r'(' + RX_ADDR + r'\s+' + RX_FRAME + r' VALUE: nil\n?)*\n' -- 2.55.0