@@ -975,12 +975,11 @@ make_new_set_basetype(PyTypeObject *type, PyObject *iterable)
975975 return make_new_set (type , iterable );
976976}
977977
978- /* The empty frozenset is a singleton */
979- static PyObject * emptyfrozenset = NULL ;
980-
981978static PyObject *
982979make_new_frozenset (PyTypeObject * type , PyObject * iterable )
983980{
981+ PyObject * res ;
982+
984983 if (type != & PyFrozenSet_Type ) {
985984 return make_new_set (type , iterable );
986985 }
@@ -991,7 +990,7 @@ make_new_frozenset(PyTypeObject *type, PyObject *iterable)
991990 Py_INCREF (iterable );
992991 return iterable ;
993992 }
994- PyObject * res = make_new_set ((PyTypeObject * )type , iterable );
993+ res = make_new_set ((PyTypeObject * )type , iterable );
995994 if (res == NULL || PySet_GET_SIZE (res ) != 0 ) {
996995 return res ;
997996 }
@@ -1000,11 +999,17 @@ make_new_frozenset(PyTypeObject *type, PyObject *iterable)
1000999 }
10011000
10021001 // The empty frozenset is a singleton
1003- if (emptyfrozenset == NULL ) {
1004- emptyfrozenset = make_new_set ((PyTypeObject * )type , NULL );
1002+ PyInterpreterState * interp = _PyInterpreterState_GET ();
1003+ res = interp -> empty_frozenset ;
1004+ if (res == NULL ) {
1005+ interp -> empty_frozenset = make_new_set ((PyTypeObject * )type , NULL );
1006+ res = interp -> empty_frozenset ;
1007+ if (res == NULL ) {
1008+ return NULL ;
1009+ }
10051010 }
1006- Py_XINCREF ( emptyfrozenset );
1007- return emptyfrozenset ;
1011+ Py_INCREF ( res );
1012+ return res ;
10081013}
10091014
10101015static PyObject *
@@ -2300,9 +2305,9 @@ PySet_Add(PyObject *anyset, PyObject *key)
23002305}
23012306
23022307void
2303- _PySet_Fini (void )
2308+ _PySet_Fini (PyThreadState * tstate )
23042309{
2305- Py_CLEAR (emptyfrozenset );
2310+ Py_CLEAR (tstate -> interp -> empty_frozenset );
23062311}
23072312
23082313int
0 commit comments