aboutsummaryrefslogtreecommitdiff
path: root/src/lj_trace.c
diff options
context:
space:
mode:
authorMike Pall <mike>2026-02-11 23:12:53 +0100
committerMike Pall <mike>2026-02-11 23:12:53 +0100
commitab834de8b6a963a83046a72b5a7751dcd6cdcff0 (patch)
tree8ef2909de58103cf6e657d1c8b99c81f06fcfbc7 /src/lj_trace.c
parenteff4006837792b6105e0a1743283ddde3548fc09 (diff)
downloadluajit-ab834de8b6a963a83046a72b5a7751dcd6cdcff0.tar.gz
luajit-ab834de8b6a963a83046a72b5a7751dcd6cdcff0.tar.bz2
luajit-ab834de8b6a963a83046a72b5a7751dcd6cdcff0.zip
Avoid recording interference due to invocation of VM hooks.
Thanks to Sergey Kaplun. #1429 #1434
Diffstat (limited to 'src/lj_trace.c')
-rw-r--r--src/lj_trace.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c
index 1f3686a3..e55045f4 100644
--- a/src/lj_trace.c
+++ b/src/lj_trace.c
@@ -467,7 +467,11 @@ static void trace_start(jit_State *J)
467 J->ktrace = 0; 467 J->ktrace = 0;
468 setgcref(J->cur.startpt, obj2gco(J->pt)); 468 setgcref(J->cur.startpt, obj2gco(J->pt));
469 469
470 lj_vmevent_send(J2G(J), TRACE, 470 lj_vmevent_send_(J2G(J), TRACE,
471 TValue savetv = J2G(J)->tmptv;
472 TValue savetv2 = J2G(J)->tmptv2;
473 TraceNo parent = J->parent;
474 ExitNo exitno = J->exitno;
471 setstrV(V, V->top++, lj_str_newlit(V, "start")); 475 setstrV(V, V->top++, lj_str_newlit(V, "start"));
472 setintV(V->top++, traceno); 476 setintV(V->top++, traceno);
473 setfuncV(V, V->top++, J->fn); 477 setfuncV(V, V->top++, J->fn);
@@ -482,6 +486,11 @@ static void trace_start(jit_State *J)
482 setintV(V->top++, -1); 486 setintV(V->top++, -1);
483 } 487 }
484 } 488 }
489 ,
490 J2G(J)->tmptv = savetv;
491 J2G(J)->tmptv2 = savetv2;
492 J->parent = parent;
493 J->exitno = exitno;
485 ); 494 );
486 lj_record_setup(J); 495 lj_record_setup(J);
487} 496}