mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
gh-78214: marshal: Stabilize FLAG_REF usage (GH-8226)
Use FLAG_REF always for interned strings. Refcounts of interned string is very unstable. When compiling same source, refcounts of interned string in the output may be 1 or >1. It makes FLAG_REF usage unstable. To help reproducible build, use FLAG_REF for interned string even if refcnt(obj)==1.
This commit is contained in:
parent
dfb1b9da8a
commit
6dcfd6c5e3
3 changed files with 17 additions and 10 deletions
|
@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
|
|||
if (p->version < 3 || p->hashtable == NULL)
|
||||
return 0; /* not writing object references */
|
||||
|
||||
/* if it has only one reference, it definitely isn't shared */
|
||||
if (Py_REFCNT(v) == 1)
|
||||
/* If it has only one reference, it definitely isn't shared.
|
||||
* But we use TYPE_REF always for interned string, to PYC file stable
|
||||
* as possible.
|
||||
*/
|
||||
if (Py_REFCNT(v) == 1 &&
|
||||
!(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
entry = _Py_hashtable_get_entry(p->hashtable, v);
|
||||
if (entry != NULL) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue