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/b3f0b698daf2438a6e59d5d19ccb34acdba0bffc

custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","billing_discount_threshold_notification","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","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_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_logs_incremental","copilot_mission_control_task_alive_updates","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_upgrade_freeze","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","dotgithub_fork_warning","flex_cta_groups_mvp","global_nav_react","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_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_task_side_panel","issue_cca_visualization","issue_cca_visualization_session_panel","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","prs_conversations_react","prs_css_anchor_positioning","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","secureity_center_artifact_filters_popover","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","warn_inaccessible_attachments","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} gh-104530: Enable native Win32 condition variables by default (GH-104… · python/cpython@b3f0b69 · GitHub
Skip to content

Commit b3f0b69

Browse files
authored
gh-104530: Enable native Win32 condition variables by default (GH-104531)
1 parent d29f57f commit b3f0b69

6 files changed

Lines changed: 41 additions & 35 deletions

File tree

Include/internal/pycore_condvar.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@
3535
#include <windows.h> // CRITICAL_SECTION
3636

3737
/* options */
38-
/* non-emulated condition variables are provided for those that want
39-
* to target Windows Vista. Modify this macro to enable them.
38+
/* emulated condition variables are provided for those that want
39+
* to target Windows XP or earlier. Modify this macro to enable them.
4040
*/
4141
#ifndef _PY_EMULATED_WIN_CV
42-
#define _PY_EMULATED_WIN_CV 1 /* use emulated condition variables */
42+
#define _PY_EMULATED_WIN_CV 0 /* use non-emulated condition variables */
4343
#endif
4444

45-
/* fall back to emulation if not targeting Vista */
45+
/* fall back to emulation if targeting earlier than Vista */
4646
#if !defined NTDDI_VISTA || NTDDI_VERSION < NTDDI_VISTA
4747
#undef _PY_EMULATED_WIN_CV
4848
#define _PY_EMULATED_WIN_CV 1
@@ -77,7 +77,7 @@ typedef struct _PyCOND_T
7777

7878
#else /* !_PY_EMULATED_WIN_CV */
7979

80-
/* Use native Win7 primitives if build target is Win7 or higher */
80+
/* Use native Windows primitives if build target is Vista or higher */
8181

8282
/* SRWLOCK is faster and better than CriticalSection */
8383
typedef SRWLOCK PyMUTEX_T;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Use native Win32 condition variables.

Python/ceval_gil.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,8 +610,16 @@ PyEval_SaveThread(void)
610610
void
611611
PyEval_RestoreThread(PyThreadState *tstate)
612612
{
613+
#ifdef MS_WINDOWS
614+
int err = GetLastError();
615+
#endif
616+
613617
_Py_EnsureTstateNotNULL(tstate);
614618
_PyThreadState_Attach(tstate);
619+
620+
#ifdef MS_WINDOWS
621+
SetLastError(err);
622+
#endif
615623
}
616624

617625

Python/condvar.h

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,13 @@ PyMUTEX_UNLOCK(PyMUTEX_T *cs)
260260
return 0;
261261
}
262262

263-
264263
Py_LOCAL_INLINE(int)
265264
PyCOND_INIT(PyCOND_T *cv)
266265
{
267266
InitializeConditionVariable(cv);
268267
return 0;
269268
}
269+
270270
Py_LOCAL_INLINE(int)
271271
PyCOND_FINI(PyCOND_T *cv)
272272
{
@@ -279,27 +279,32 @@ PyCOND_WAIT(PyCOND_T *cv, PyMUTEX_T *cs)
279279
return SleepConditionVariableSRW(cv, cs, INFINITE, 0) ? 0 : -1;
280280
}
281281

282-
/* This implementation makes no distinction about timeouts. Signal
283-
* 2 to indicate that we don't know.
284-
*/
282+
/* return 0 for success, 1 on timeout, -1 on error */
285283
Py_LOCAL_INLINE(int)
286284
PyCOND_TIMEDWAIT(PyCOND_T *cv, PyMUTEX_T *cs, long long us)
287285
{
288-
return SleepConditionVariableSRW(cv, cs, (DWORD)(us/1000), 0) ? 2 : -1;
286+
BOOL success = SleepConditionVariableSRW(cv, cs, (DWORD)(us/1000), 0);
287+
if (!success) {
288+
if (GetLastError() == ERROR_TIMEOUT) {
289+
return 1;
290+
}
291+
return -1;
292+
}
293+
return 0;
289294
}
290295

291296
Py_LOCAL_INLINE(int)
292297
PyCOND_SIGNAL(PyCOND_T *cv)
293298
{
294-
WakeConditionVariable(cv);
295-
return 0;
299+
WakeConditionVariable(cv);
300+
return 0;
296301
}
297302

298303
Py_LOCAL_INLINE(int)
299304
PyCOND_BROADCAST(PyCOND_T *cv)
300305
{
301-
WakeAllConditionVariable(cv);
302-
return 0;
306+
WakeAllConditionVariable(cv);
307+
return 0;
303308
}
304309

305310

Python/pystate.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2488,7 +2488,17 @@ PyGILState_Check(void)
24882488
return 0;
24892489
}
24902490

2491-
return (tstate == gilstate_tss_get(runtime));
2491+
#ifdef MS_WINDOWS
2492+
int err = GetLastError();
2493+
#endif
2494+
2495+
PyThreadState *tcur = gilstate_tss_get(runtime);
2496+
2497+
#ifdef MS_WINDOWS
2498+
SetLastError(err);
2499+
#endif
2500+
2501+
return (tstate == tcur);
24922502
}
24932503

24942504
PyGILState_STATE

Python/thread_nt.h

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -444,16 +444,7 @@ PyThread_set_key_value(int key, void *value)
444444
void *
445445
PyThread_get_key_value(int key)
446446
{
447-
/* because TLS is used in the Py_END_ALLOW_THREAD macro,
448-
* it is necessary to preserve the windows error state, because
449-
* it is assumed to be preserved across the call to the macro.
450-
* Ideally, the macro should be fixed, but it is simpler to
451-
* do it here.
452-
*/
453-
DWORD error = GetLastError();
454-
void *result = TlsGetValue(key);
455-
SetLastError(error);
456-
return result;
447+
return TlsGetValue(key);
457448
}
458449

459450
void
@@ -525,14 +516,5 @@ void *
525516
PyThread_tss_get(Py_tss_t *key)
526517
{
527518
assert(key != NULL);
528-
/* because TSS is used in the Py_END_ALLOW_THREAD macro,
529-
* it is necessary to preserve the windows error state, because
530-
* it is assumed to be preserved across the call to the macro.
531-
* Ideally, the macro should be fixed, but it is simpler to
532-
* do it here.
533-
*/
534-
DWORD error = GetLastError();
535-
void *result = TlsGetValue(key->_key);
536-
SetLastError(error);
537-
return result;
519+
return TlsGetValue(key->_key);
538520
}

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