Batuhan <batuhanosmantask...@gmail.com> added the comment:

I try to track down this. 

sys_settrace calls PyEval_SetTrace with trace_trampoline and the function given 
to it. The trace_trampoline is important because it checks the result and if 
result is NULL (for example like f() recursion in your code) it sets 
c_tracefunc and c_traceobj to NULL. It is why it doesnt work.

if (result == NULL) {
    PyEval_SetTrace(NULL, NULL);
    Py_CLEAR(frame->f_trace);
    return -1;
}

We can create a simple reset function for resetting everything and then setting 
c_tracefunc, c_traceobj variables back to the thread state. 
https://github.com/isidentical/cpython/commit/3bafbf3a89e09cc573ddbcd13f9334e164f7dd8b


But then a set of tests will fail with raw ValueError produced by tracer.

class RaisingTraceFuncTestCase(unittest.TestCase):
    ...

    def trace(self, frame, event, arg):
        """A trace function that raises an exception in response to a
        specific trace event."""
        if event == self.raiseOnEvent:
            raise ValueError # just something that isn't RuntimeError
        else:
            return self.trace


This should be catched in
 
    def run_test_for_event(self, event):
        try:
            for i in range(sys.getrecursionlimit() + 1):
                sys.settrace(self.trace)
                try:
                    self.f()
                except ValueError:
                    pass
                else:
                    self.fail("exception not raised!")
        except RuntimeError:
            self.fail("recursion counter not reset")

but after resetting, it doesn't work. I'm missing something but i dont know 
what i'm missing.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue23012>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to