new file mode 100644
@@ -0,0 +1,37 @@
+From 388e023fe1197c1ffed374520ed45df4ac72b8f5 Mon Sep 17 00:00:00 2001
+From: Sai Sneha <saisneha196@gmail.com>
+Date: Thu, 21 May 2026 13:08:07 +0530
+Subject: [PATCH] Fix ThreadingMock call_count race condition
+
+ThreadingMock._increment_mock_call() was not thread-safe.
+Multiple threads calling the mock simultaneously could lose
+increments due to race conditions on call_count and other
+attributes.
+
+Fix by overriding _increment_mock_call in ThreadingMixin
+and wrapping it with the existing _mock_calls_events_lock.
+
+Upstream-Status: Backport [https://github.com/python/cpython/pull/150176]
+
+Signed-off-by: Sai Sneha <saisneha196@gmail.com>
+---
+ Lib/unittest/mock.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
+index 16f3699e89..56cdc37942 100644
+--- a/Lib/unittest/mock.py
++++ b/Lib/unittest/mock.py
+@@ -3113,6 +3113,10 @@ def _mock_call(self, *args, **kwargs):
+
+ return ret_value
+
++ def _increment_mock_call(self, /, *args, **kwargs):
++ with self._mock_calls_events_lock:
++ super()._increment_mock_call(*args, **kwargs)
++
+ def wait_until_called(self, *, timeout=_timeout_unset):
+ """Wait until the mock object is called.
+
+--
+2.34.1
@@ -35,6 +35,7 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
file://0001-Skip-flaky-test_default_timeout-tests.patch \
file://0001-test_only_active_thread-skip-problematic-test.patch \
file://0001-prefer-valid-entrypoints.patch \
+ file://0001-Fix-ThreadingMock-call-count-race-condition.patch \
"
SRC_URI:append:class-native = " \
file://0001-Lib-sysconfig.py-use-prefix-value-from-build-configu.patch \
ThreadingMock._increment_mock_call() was not thread-safe causing intermittent ptest failures on qemuarm64: FAIL: test_call_count_thread_safe AssertionError: 983 != 1000 Each time a mock is called, Python reads the call_count, adds 1, and writes it back. When multiple threads do this simultaneously, some increments get lost because two threads can read the same value before either writes back. The fix adds a lock around this operation in ThreadingMock so only one thread can update call_count at a time. Reproduction and testing: - x86 stress test (50 threads x 10000 calls x 30 runs): Before fix: 23/30 failures, missing up to 42095 calls After fix: 0/30 failures - qemuarm64 (10 threads x 100 calls x 20 runs): Before fix: 3/20 failures, missing up to 49 calls After fix: 0/20 failures - All 19 existing ThreadingMock tests pass Upstream fix merged into CPython main: https://github.com/python/cpython/pull/150176 Fixes [YOCTO #16213] Signed-off-by: Sai Sneha <saisneha196@gmail.com> --- ...eadingMock-call-count-race-condition.patch | 37 +++++++++++++++++++ .../recipes-devtools/python/python3_3.14.4.bb | 1 + 2 files changed, 38 insertions(+) create mode 100644 meta/recipes-devtools/python/python3/0001-Fix-ThreadingMock-call-count-race-condition.patch