Skip to content

Commit f2626ee

Browse files
author
Adam Hrbac
committed
[GR-40754] Stop tracing async actions
PullRequest: graalpython/2424
2 parents 48750f9 + 5ae488b commit f2626ee

File tree

5 files changed

+66
-2
lines changed

5 files changed

+66
-2
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_sys_settrace.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import unittest
4141
import difflib
4242
import sys
43+
import signal
4344

4445
import builtins
4546

@@ -155,7 +156,6 @@ def test_case(self):
155156
return test_case
156157

157158
@unittest.skipIf(skip, 'sys.settrace only works in the bytecode interpreter')
158-
@unittest.skipIf(True, 'Disabled due to GR-40754')
159159
class TraceTests(unittest.TestCase):
160160
def trace(self, frame, event, arg):
161161
code = frame.f_code
@@ -198,3 +198,22 @@ def fun1():
198198
(12, 'fun1', 'line', None)]
199199
if self.events != events:
200200
self.fail('\n'+'\n'.join(difflib.ndiff([str(x) for x in events], [str(x) for x in self.events])))
201+
202+
def simpler_trace(self, fr, ev, arg):
203+
self.events.append(fr.f_code.co_name)
204+
205+
@unittest.skipIf(not hasattr(signal, 'SIGUSR1'), "User defined signal not present")
206+
@unittest.skipIf(not hasattr(builtins, '__graalpython__'), "async actions do get traced in CPython")
207+
def test_07_async_actions_not_traced(self):
208+
def handler(*_): handler.called = 1
209+
210+
def helper(): return 1
211+
signal.signal(signal.SIGUSR1, handler)
212+
self.events = []
213+
sys.settrace(self.simpler_trace)
214+
signal.raise_signal(signal.SIGUSR1)
215+
for i in range(1000): helper()
216+
sys.settrace(None)
217+
# handler.called is not checked, since it could cause a transient
218+
for name in self.events:
219+
self.assertEqual(name, 'helper')
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_call
2+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_exception
3+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_exception_arguments
4+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_line
5+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_return
6+
*graalpython.lib-python.3.test.test_sys_settrace.RaisingTraceFuncTestCase.test_trash_stack
7+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_01_basic
8+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_02_arigo0
9+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_02_arigo1
10+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_02_arigo2
11+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_03_one_instr
12+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_04_no_pop_blocks
13+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_05_no_pop_tops
14+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_06_call
15+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_07_raise
16+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_08_settrace_and_return
17+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_14_onliner_if
18+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_15_loops
19+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_17_none_f_trace
20+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_set_and_retrieve_func
21+
*graalpython.lib-python.3.test.test_sys_settrace.SkipLineEventsTraceTestCase.test_set_and_retrieve_none
22+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_01_basic
23+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_03_one_instr
24+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_04_no_pop_blocks
25+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_05_no_pop_tops
26+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_06_call
27+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_08_settrace_and_return
28+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_14_onliner_if
29+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_17_none_f_trace
30+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_set_and_retrieve_func
31+
*graalpython.lib-python.3.test.test_sys_settrace.TraceTestCase.test_set_and_retrieve_none

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/bytecode/PBytecodeRootNode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2349,6 +2349,7 @@ private void invokeTraceFunction(VirtualFrame virtualFrame, Object arg, PythonCo
23492349
if (threadState.isTracing()) {
23502350
return;
23512351
}
2352+
assert event != PythonContext.TraceEvent.DISABLED;
23522353
threadState.tracingStart(event);
23532354
PFrame pyFrame = mutableData.setPyFrame(ensurePyFrame(virtualFrame, mutableData.getPyFrame()));
23542355
Object traceFn = useLocalFn ? pyFrame.getLocalTraceFun() : threadState.getTraceFun();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/AsyncHandler.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ protected boolean proceed() {
122122
@Override
123123
public final void execute(PythonContext context) {
124124
Debugger debugger = null;
125+
PythonContext.PythonThreadState threadState = null;
126+
PythonLanguage language = context.getLanguage();
125127
do {
126128
Object callable = callable();
127129
if (callable != null) {
@@ -136,6 +138,13 @@ public final void execute(PythonContext context) {
136138
if (debugger == null) {
137139
debugger = Debugger.find(context.getEnv());
138140
}
141+
if (threadState == null) {
142+
threadState = context.getThreadState(language);
143+
}
144+
boolean alreadyTracing = threadState.isTracing();
145+
if (!alreadyTracing) {
146+
threadState.tracingStart(PythonContext.TraceEvent.DISABLED);
147+
}
139148
debugger.disableStepping();
140149
try {
141150
GenericInvokeNode.getUncached().execute(context.getAsyncHandler().callTarget, args);
@@ -148,6 +157,9 @@ public final void execute(PythonContext context) {
148157
ExceptionUtils.printPythonLikeStackTrace(e);
149158
} finally {
150159
debugger.restoreStepping();
160+
if (!alreadyTracing) {
161+
threadState.tracingStop();
162+
}
151163
}
152164
}
153165
} while (proceed());

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ public enum TraceEvent {
193193
CALL("call"),
194194
EXCEPTION("exception"),
195195
LINE("line"),
196-
RETURN("return");
196+
RETURN("return"),
197+
DISABLED("");
197198

198199
public final TruffleString pythonName;
199200

0 commit comments

Comments
 (0)