tqchen commented on code in PR #327:
URL: https://github.com/apache/tvm-ffi/pull/327#discussion_r2610792214
##########
python/tvm_ffi/error.py:
##########
@@ -121,19 +121,29 @@ def append_traceback(
The new traceback with the appended frame.
"""
- frame = self._create_frame(filename, lineno, func)
- return types.TracebackType(tb, frame, frame.f_lasti, lineno)
+
+ # Magic hack to prevent a circular reference
+ def create(
+ tb: types.TracebackType | None, frame: types.FrameType, lineno: int
+ ) -> types.TracebackType:
+ return types.TracebackType(tb, frame, frame.f_lasti, lineno)
+
+ return create(tb, self._create_frame(filename, lineno, func), lineno)
_TRACEBACK_MANAGER = TracebackManager()
def _with_append_backtrace(py_error: BaseException, backtrace: str) ->
BaseException:
"""Append the backtrace to the py_error and return it."""
- tb = py_error.__traceback__
- for filename, lineno, func in _parse_backtrace(backtrace):
- tb = _TRACEBACK_MANAGER.append_traceback(tb, filename, lineno, func)
- return py_error.with_traceback(tb)
+ # we manually delete py_error and tb to avoid reference cycle, making it
faster to gc the locals inside the frame
Review Comment:
would be great to add explainations of why deling py_error, tb helps
##########
python/tvm_ffi/error.py:
##########
@@ -121,19 +121,29 @@ def append_traceback(
The new traceback with the appended frame.
"""
- frame = self._create_frame(filename, lineno, func)
- return types.TracebackType(tb, frame, frame.f_lasti, lineno)
+
+ # Magic hack to prevent a circular reference
Review Comment:
can we add more comments on why this function prevent circular reference,
would beuseful for future references.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]