bpo-46430: Fix memory leak in interned strings of deep-frozen modules… · python/cpython@4dc7463 · GitHub
Skip to content

Commit 4dc7463

Browse files
bpo-46430: Fix memory leak in interned strings of deep-frozen modules (GH-31549)
1 parent 042f31d commit 4dc7463

6 files changed

Lines changed: 21 additions & 6 deletions

File tree

‎Include/internal/pycore_pylifecycle.h‎

Lines changed: 1 addition & 1 deletion
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix memory leak in interned strings of deep-frozen modules.

‎Programs/_bootstrap_python.c‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@
1414
#include "Python/frozen_modules/importlib._bootstrap_external.h"
1515
/* End includes */
1616

17-
/* Empty finalizer for deepfrozen modules*/
17+
/* Empty initializer for deepfrozen modules */
18+
void _Py_Deepfreeze_Init(void)
19+
{
20+
}
21+
/* Empty finalizer for deepfrozen modules */
1822
void
19-
_Py_Deepfreeze_Fini(void)
23+
_Py_Deepfreeze_Fini(void)
2024
{
2125
}
2226

‎Programs/_freeze_module.c‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
#include <unistd.h>
2323
#endif
2424

25+
/* Empty initializer for deepfrozen modules */
26+
void _Py_Deepfreeze_Init(void)
27+
{
28+
}
2529
/* Empty finalizer for deepfrozen modules */
2630
void
2731
_Py_Deepfreeze_Fini(void)

‎Python/pylifecycle.c‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -754,7 +754,6 @@ pycore_init_types(PyInterpreterState *interp)
754754
if (_PyStatus_EXCEPTION(status)) {
755755
return status;
756756
}
757-
758757
return _PyStatus_OK();
759758
}
760759

@@ -827,7 +826,10 @@ pycore_interp_init(PyThreadState *tstate)
827826
if (_PyStatus_EXCEPTION(status)) {
828827
return status;
829828
}
830-
829+
// Intern strings in deep-frozen modules first so that others
830+
// can use it instead of creating a heap allocated string.
831+
_Py_Deepfreeze_Init();
832+
831833
status = pycore_init_types(interp);
832834
if (_PyStatus_EXCEPTION(status)) {
833835
goto done;

‎Tools/scripts/deepfreeze.py‎

Lines changed: 5 additions & 1 deletion

0 commit comments

Comments
 (0)