Skip to content

Commit c9ece31

Browse files
committed
Address comments
1 parent 52285a2 commit c9ece31

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

Objects/setobject.c

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff 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) {

0 commit comments

Comments
 (0)