mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Fixes https://github.com/pytorch/pytorch/issues/119607 for 3.11+. In 3.11+, `_PyFrame_FastToLocalsWithError` could implicity run `COPY_FREE_VARS` on the original frame, leading to double incref's since the dynamo shadow frame can rerun `COPY_FREE_VARS`. So the solution is to skip the first `COPY_FREE_VARS` instruction in the shadow frame if it was already executed in the original frame. Also move the location for clearing the original frame in 3.12 to handle error cases more thoroughly. Pull Request resolved: https://github.com/pytorch/pytorch/pull/124238 Approved by: https://github.com/jansel
45 lines
1.0 KiB
C
45 lines
1.0 KiB
C
#pragma once
|
|
|
|
#include <torch/csrc/utils/python_compat.h>
|
|
|
|
// Functions that need to be copied from the CPython source
|
|
// should go in cpython_defs.c. Copying is required when, e.g.,
|
|
// we need to call internal CPython functions that are not exposed.
|
|
|
|
#if IS_PYTHON_3_11_PLUS
|
|
|
|
#include <internal/pycore_frame.h>
|
|
|
|
int THP_PyFrame_FastToLocalsWithError(
|
|
_PyInterpreterFrame* frame,
|
|
int* free_vars_copied);
|
|
|
|
PyFunctionObject* _PyFunction_CopyWithNewCode(
|
|
PyFunctionObject* o,
|
|
PyCodeObject* code);
|
|
|
|
void THP_PyFrame_Clear(_PyInterpreterFrame* frame);
|
|
|
|
_PyInterpreterFrame* THP_PyThreadState_BumpFramePointerSlow(
|
|
PyThreadState* tstate,
|
|
size_t size);
|
|
|
|
void THP_PyThreadState_PopFrame(
|
|
PyThreadState* tstate,
|
|
_PyInterpreterFrame* frame);
|
|
|
|
#endif
|
|
|
|
// pointers to _PyOpcode_Caches for C++
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" const uint8_t* THP_PyOpcode_Caches;
|
|
extern "C" const int THP_PyOpcode_Caches_size;
|
|
|
|
#else
|
|
|
|
extern const uint8_t* THP_PyOpcode_Caches;
|
|
extern const int THP_PyOpcode_Caches_size;
|
|
|
|
#endif
|