File tree Expand file tree Collapse file tree 1 file changed +22
-24
lines changed
Expand file tree Collapse file tree 1 file changed +22
-24
lines changed Original file line number Diff line number Diff line change @@ -1061,8 +1061,7 @@ setiter_len(PyObject *op, PyObject *Py_UNUSED(ignored))
10611061 PySetObject * so = si -> si_set ;
10621062 if (so != NULL ) {
10631063 Py_BEGIN_CRITICAL_SECTION2 (op , so );
1064- if (si -> si_pos >= 0 &&
1065- si -> si_used == FT_ATOMIC_LOAD_SSIZE_RELAXED (so -> used ))
1064+ if (si -> si_pos >= 0 && si -> si_used == so -> used )
10661065 {
10671066 len = si -> len ;
10681067 }
@@ -1133,33 +1132,21 @@ setiter_iternext(PyObject *self)
11331132
11341133#ifdef Py_GIL_DISABLED
11351134 Py_BEGIN_CRITICAL_SECTION2 (self , so );
1136- i = si -> si_pos ;
1137- if (i >= 0 ) {
1138- entry = so -> table ;
1139- mask = so -> mask ;
1140- while (i <= mask &&
1141- (entry [i ].key == NULL || entry [i ].key == dummy )) {
1142- i ++ ;
1143- }
1144- if (i <= mask ) {
1145- key = Py_NewRef (entry [i ].key );
1146- si -> si_pos = i + 1 ;
1147- si -> len -- ;
1148- }
1149- else {
1150- si -> si_pos = -1 ;
1151- si -> len = 0 ;
1152- }
1153- }
1154- Py_END_CRITICAL_SECTION2 ();
1155- return key ;
11561135#else
11571136 Py_BEGIN_CRITICAL_SECTION (so );
1137+ #endif
1138+
11581139 i = si -> si_pos ;
1140+ #ifdef Py_GIL_DISABLED
1141+ if (i < 0 ) {
1142+ /* iterator already exhausted */
1143+ goto done ;
1144+ }
1145+ #endif
1146+
11591147 entry = so -> table ;
11601148 mask = so -> mask ;
1161- while (i <= mask &&
1162- (entry [i ].key == NULL || entry [i ].key == dummy )) {
1149+ while (i <= mask && (entry [i ].key == NULL || entry [i ].key == dummy )) {
11631150 i ++ ;
11641151 }
11651152 if (i <= mask ) {
@@ -1168,9 +1155,20 @@ setiter_iternext(PyObject *self)
11681155 si -> len -- ;
11691156 }
11701157 else {
1158+ /* exhausted */
1159+ si -> si_pos = -1 ;
1160+ si -> len = 0 ;
1161+ #ifndef Py_GIL_DISABLED
11711162 si -> si_set = NULL ;
11721163 decref_so = 1 ;
1164+ #endif
11731165 }
1166+
1167+ #ifdef Py_GIL_DISABLED
1168+ done :
1169+ Py_END_CRITICAL_SECTION2 ();
1170+ return key ;
1171+ #else
11741172 Py_END_CRITICAL_SECTION ();
11751173
11761174 if (decref_so ) {
You can’t perform that action at this time.
0 commit comments