]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-131525: Cache the result of tuple_hash (#131529)
authorMichael Droettboom <mdboom@gmail.com>
Thu, 27 Mar 2025 13:57:06 +0000 (09:57 -0400)
committerGitHub <noreply@github.com>
Thu, 27 Mar 2025 13:57:06 +0000 (09:57 -0400)
commit8614f86b7163b1c39798b481902dbb511292a537
tree2bf6a46b432df3d6bf01a4176f3a614a01c48566
parentcf5e438c0297954c4411c1c3ae4ba67a48b134ea
gh-131525: Cache the result of tuple_hash (#131529)

* gh-131525: Cache the result of tuple_hash

* Fix debug builds

* Add blurb

* Fix formatting

* Pre-compute empty tuple singleton

* Mostly set the cache within tuple_alloc

* Fixes for TSAN

* Pre-compute empty tuple singleton

* Fix for 32-bit platforms

* Assert that op != NULL in _PyTuple_RESET_HASH_CACHE

* Use FT_ATOMIC_STORE_SSIZE_RELAXED macro

* Update Include/internal/pycore_tuple.h

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
* Fix alignment

* atomic load

* Update Objects/tupleobject.c

Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>
---------

Co-authored-by: Bénédikt Tran <10796600+picnixz@users.noreply.github.com>
Co-authored-by: Chris Eibl <138194463+chris-eibl@users.noreply.github.com>
102 files changed:
Include/cpython/tupleobject.h
Include/internal/pycore_runtime_init.h
Include/internal/pycore_tuple.h
Lib/test/clinic.test.c
Lib/test/test_clinic.py
Lib/test/test_sys.py
Misc/NEWS.d/next/C_API/2025-03-20-17-14-29.gh-issue-131525.n8Di6a.rst [new file with mode: 0644]
Modules/_ctypes/clinic/cfield.c.h
Modules/_functoolsmodule.c
Modules/_io/clinic/_iomodule.c.h
Modules/_io/clinic/bufferedio.c.h
Modules/_io/clinic/bytesio.c.h
Modules/_io/clinic/fileio.c.h
Modules/_io/clinic/stringio.c.h
Modules/_io/clinic/textio.c.h
Modules/_io/clinic/winconsoleio.c.h
Modules/_multiprocessing/clinic/semaphore.c.h
Modules/_sqlite/clinic/connection.c.h
Modules/_sqlite/clinic/cursor.c.h
Modules/_sqlite/clinic/module.c.h
Modules/_sre/clinic/sre.c.h
Modules/_ssl/clinic/cert.c.h
Modules/_testcapi/clinic/exceptions.c.h
Modules/cjkcodecs/clinic/multibytecodec.c.h
Modules/clinic/_asynciomodule.c.h
Modules/clinic/_bisectmodule.c.h
Modules/clinic/_bz2module.c.h
Modules/clinic/_codecsmodule.c.h
Modules/clinic/_collectionsmodule.c.h
Modules/clinic/_csv.c.h
Modules/clinic/_cursesmodule.c.h
Modules/clinic/_datetimemodule.c.h
Modules/clinic/_elementtree.c.h
Modules/clinic/_functoolsmodule.c.h
Modules/clinic/_hashopenssl.c.h
Modules/clinic/_lsprof.c.h
Modules/clinic/_lzmamodule.c.h
Modules/clinic/_opcode.c.h
Modules/clinic/_pickle.c.h
Modules/clinic/_queuemodule.c.h
Modules/clinic/_ssl.c.h
Modules/clinic/_struct.c.h
Modules/clinic/_testclinic.c.h
Modules/clinic/_testclinic_depr.c.h
Modules/clinic/_testinternalcapi.c.h
Modules/clinic/_testmultiphase.c.h
Modules/clinic/_threadmodule.c.h
Modules/clinic/_winapi.c.h
Modules/clinic/_zoneinfo.c.h
Modules/clinic/binascii.c.h
Modules/clinic/blake2module.c.h
Modules/clinic/cmathmodule.c.h
Modules/clinic/gcmodule.c.h
Modules/clinic/grpmodule.c.h
Modules/clinic/itertoolsmodule.c.h
Modules/clinic/mathmodule.c.h
Modules/clinic/md5module.c.h
Modules/clinic/overlapped.c.h
Modules/clinic/posixmodule.c.h
Modules/clinic/pyexpat.c.h
Modules/clinic/selectmodule.c.h
Modules/clinic/sha1module.c.h
Modules/clinic/sha2module.c.h
Modules/clinic/sha3module.c.h
Modules/clinic/signalmodule.c.h
Modules/clinic/socketmodule.c.h
Modules/clinic/syslogmodule.c.h
Modules/clinic/zlibmodule.c.h
Modules/itertoolsmodule.c
Objects/clinic/bytearrayobject.c.h
Objects/clinic/bytesobject.c.h
Objects/clinic/codeobject.c.h
Objects/clinic/complexobject.c.h
Objects/clinic/descrobject.c.h
Objects/clinic/enumobject.c.h
Objects/clinic/funcobject.c.h
Objects/clinic/listobject.c.h
Objects/clinic/longobject.c.h
Objects/clinic/memoryobject.c.h
Objects/clinic/moduleobject.c.h
Objects/clinic/odictobject.c.h
Objects/clinic/structseq.c.h
Objects/clinic/typevarobject.c.h
Objects/clinic/unicodeobject.c.h
Objects/dictobject.c
Objects/enumobject.c
Objects/odictobject.c
Objects/stringlib/clinic/transmogrify.h.h
Objects/structseq.c
Objects/tupleobject.c
PC/clinic/_wmimodule.cpp.h
PC/clinic/winreg.c.h
Python/bltinmodule.c
Python/clinic/Python-tokenize.c.h
Python/clinic/_warnings.c.h
Python/clinic/bltinmodule.c.h
Python/clinic/import.c.h
Python/clinic/instruction_sequence.c.h
Python/clinic/marshal.c.h
Python/clinic/sysmodule.c.h
Python/clinic/traceback.c.h
Tools/clinic/libclinic/parse_args.py