Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH luajit] dbg: remove wrong GC state
@ 2026-10-15  7:20 Mikhail Elhimov via Tarantool-patches
  0 siblings, 0 replies; only message in thread
From: Mikhail Elhimov via Tarantool-patches @ 2026-10-15  7:20 UTC (permalink / raw)
  To: Sergey Kaplun, Sergey Bronnikov, Evgeniy Temirgaleev; +Cc: tarantool-patches

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-15  7:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-15  7:20 [Tarantool-patches] [PATCH luajit] dbg: remove wrong GC state Mikhail Elhimov via Tarantool-patches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox