From: Mikhail Elhimov via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: Sergey Kaplun <skaplun@tarantool.org>,
Sergey Bronnikov <sergeyb@tarantool.org>,
Evgeniy Temirgaleev <e.temirgaleev@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
Subject: [Tarantool-patches] [PATCH luajit] dbg: remove wrong GC state
Date: Thu, 15 Oct 2026 10:20:55 +0300 [thread overview]
Message-ID: <20261015072055.317299-1-m.elhimov@vk.team> (raw)
It was copied originally by mistake from the LuaVela fork of LuaJIT.
---
Branch: https://github.com/tarantool/luajit/tree/elhimov/gh-noticket-dbg-remove-wrong-gcstate
src/luajit_dbg.py | 3 +-
.../debug-extension-tests.py | 96 +++++++++++++++++--
2 files changed, 87 insertions(+), 12 deletions(-)
diff --git a/src/luajit_dbg.py b/src/luajit_dbg.py
index 1d553fb9..4ee2e70e 100644
--- a/src/luajit_dbg.py
+++ b/src/luajit_dbg.py
@@ -1246,7 +1246,6 @@ def gc_state(g):
3: 'SWEEPSTRING',
4: 'SWEEP',
5: 'FINALIZE',
- 6: 'LAST',
}.get(int(g['gc']['state']), 'INVALID')
@@ -2841,7 +2840,7 @@ class LJState(dbg.LJBase):
lj-state
The command requires no args and dumps current VM and GC states:
* VM state: <INTERP|C|GC|EXIT|RECORD|OPT|ASM|TRACE>
-* GC state: <PAUSE|PROPAGATE|ATOMIC|SWEEPSTRING|SWEEP|FINALIZE|LAST>
+* GC state: <PAUSE|PROPAGATE|ATOMIC|SWEEPSTRING|SWEEP|FINALIZE>
* JIT state: <IDLE|ACTIVE|RECORD|START|END|ASM|ERR>
'''
diff --git a/test/tarantool-debugger-tests/debug-extension-tests.py b/test/tarantool-debugger-tests/debug-extension-tests.py
index b6e51185..8456dde9 100644
--- a/test/tarantool-debugger-tests/debug-extension-tests.py
+++ b/test/tarantool-debugger-tests/debug-extension-tests.py
@@ -133,6 +133,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
@@ -269,23 +286,24 @@ class TestLJArch(TestCaseBase):
)
-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: [A-Z]+\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'
@@ -301,6 +319,64 @@ 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'
+ )
+ 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 = '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.43.0
reply other threads:[~2026-10-15 7:21 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015072055.317299-1-m.elhimov@vk.team \
--to=tarantool-patches@dev.tarantool.org \
--cc=e.temirgaleev@tarantool.org \
--cc=m.elhimov@vk.team \
--cc=sergeyb@tarantool.org \
--cc=skaplun@tarantool.org \
--subject='Re: [Tarantool-patches] [PATCH luajit] dbg: remove wrong GC state' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox