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. */
|
||||
{
|
||||
int i;
|
||||
Scheme_Scope_Set *s;
|
||||
|
||||
if (!t->simple_scopes || !scope_set_count(t->simple_scopes))
|
||||
return;
|
||||
|
||||
for (i = 0; i < NUM_RECENT_SCOPE_SETS; i++) {
|
||||
if (recent_scope_sets[prop_table][i]) {
|
||||
if (recent_scope_sets[prop_table][i] == t->simple_scopes)
|
||||
s = recent_scope_sets[prop_table][i];
|
||||
if (s) {
|
||||
if (s == t->simple_scopes)
|
||||
return;
|
||||
if (scopes_equal(recent_scope_sets[prop_table][i], t->simple_scopes)
|
||||
&& (!prop_table || scope_props_equal(recent_scope_sets[prop_table][i], t->simple_scopes))) {
|
||||
t->simple_scopes = recent_scope_sets[prop_table][i];
|
||||
if (scopes_equal(s, t->simple_scopes)
|
||||
&& (!prop_table || scope_props_equal(s, t->simple_scopes))) {
|
||||
t->simple_scopes = s;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user