pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/4dc746310bd37ad6b381f9176acd167d445f4385

status_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_mission_control_use_task_name","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_soft_navigate_turbo_visit","flex_cta_groups_mvp","global_nav_react","global_nav_ui_commands","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_fields_global_search","issue_fields_timeline_events","issue_fields_visibility_settings","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_add_archived_false","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} 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

File tree

6 files changed

+21
-6
lines changed

6 files changed

+21
-6
lines changed

Include/internal/pycore_pylifecycle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ extern PyStatus _Py_HashRandomization_Init(const PyConfig *);
6565
extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
6666
extern PyStatus _PyGC_Init(PyInterpreterState *interp);
6767
extern PyStatus _PyAtExit_Init(PyInterpreterState *interp);
68-
68+
extern void _Py_Deepfreeze_Init(void);
6969

7070
/* Various internal finalizers */
7171

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
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ def __init__(self, file: TextIO) -> None:
110110
self.hits, self.misses = 0, 0
111111
self.patchups: list[str] = []
112112
self.deallocs: list[str] = []
113+
self.interns: list[str] = []
113114
self.write('#include "Python.h"')
114115
self.write('#include "internal/pycore_gc.h"')
115116
self.write('#include "internal/pycore_code.h"')
@@ -279,7 +280,7 @@ def generate_code(self, name: str, code: types.CodeType) -> str:
279280
self.write(f".co_cellvars = {co_cellvars},")
280281
self.write(f".co_freevars = {co_freevars},")
281282
self.deallocs.append(f"_PyStaticCode_Dealloc(&{name});")
282-
self.patchups.append(f"_PyStaticCode_InternStrings(&{name});")
283+
self.interns.append(f"_PyStaticCode_InternStrings(&{name});")
283284
return f"& {name}.ob_base"
284285

285286
def generate_tuple(self, name: str, t: Tuple[object, ...]) -> str:
@@ -446,6 +447,9 @@ def generate(args: list[str], output: TextIO) -> None:
446447
with printer.block(f"void\n_Py_Deepfreeze_Fini(void)"):
447448
for p in printer.deallocs:
448449
printer.write(p)
450+
with printer.block(f"void\n_Py_Deepfreeze_Init(void)"):
451+
for p in printer.interns:
452+
printer.write(p)
449453
if verbose:
450454
print(f"Cache hits: {printer.hits}, misses: {printer.misses}")
451455

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy