fix GC-related issue with recent cache repair
Repairs a problem with d719c06e00
.
A GC can happen while checking whether a cache entry matches,
in which case the cache is cleared, so don't check the cache
slot again after comparing.
Merge to v6.3
This commit is contained in:
parent
d719c06e00
commit
2f25a1e2bd
|
@ -1808,17 +1808,19 @@ static void intern_scope_set(Scheme_Scope_Table *t, int prop_table)
|
||||||
enough. */
|
enough. */
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
Scheme_Scope_Set *s;
|
||||||
|
|
||||||
if (!t->simple_scopes || !scope_set_count(t->simple_scopes))
|
if (!t->simple_scopes || !scope_set_count(t->simple_scopes))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < NUM_RECENT_SCOPE_SETS; i++) {
|
for (i = 0; i < NUM_RECENT_SCOPE_SETS; i++) {
|
||||||
if (recent_scope_sets[prop_table][i]) {
|
s = recent_scope_sets[prop_table][i];
|
||||||
if (recent_scope_sets[prop_table][i] == t->simple_scopes)
|
if (s) {
|
||||||
|
if (s == t->simple_scopes)
|
||||||
return;
|
return;
|
||||||
if (scopes_equal(recent_scope_sets[prop_table][i], t->simple_scopes)
|
if (scopes_equal(s, t->simple_scopes)
|
||||||
&& (!prop_table || scope_props_equal(recent_scope_sets[prop_table][i], t->simple_scopes))) {
|
&& (!prop_table || scope_props_equal(s, t->simple_scopes))) {
|
||||||
t->simple_scopes = recent_scope_sets[prop_table][i];
|
t->simple_scopes = s;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user