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:
Matthew Flatt 2015-10-30 21:31:57 -04:00
parent d719c06e00
commit 2f25a1e2bd

View File

@ -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;
}
}