0
0
mirror of https://github.com/python/cpython.git synced 2024-11-21 21:09:37 +01:00
cpython/Lib/test/test_free_threading/test_slots.py
Daniele Parmeggiani 362cd2680b
gh-117657: Fix __slots__ thread safety in free-threaded build (#119368)
Fix a race in `PyMember_GetOne` and `PyMember_SetOne` for `Py_T_OBJECT_EX`.
These functions implement `__slots__` accesses for Python objects.
2024-06-17 18:44:54 +00:00

44 lines
1001 B
Python

import threading
from test.support import threading_helper
from unittest import TestCase
def run_in_threads(targets):
"""Run `targets` in separate threads"""
threads = [
threading.Thread(target=target)
for target in targets
]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
@threading_helper.requires_working_threading()
class TestSlots(TestCase):
def test_object(self):
class Spam:
__slots__ = [
"eggs",
]
def __init__(self, initial_value):
self.eggs = initial_value
spam = Spam(0)
iters = 20_000
def writer():
for _ in range(iters):
spam.eggs += 1
def reader():
for _ in range(iters):
eggs = spam.eggs
assert type(eggs) is int
assert 0 <= eggs <= iters
run_in_threads([writer, reader, reader, reader])