result->len = (word)result_len;
result->left = x;
result->right = y;
+ GC_end_stubborn_change(result);
if (depth >= MAX_DEPTH) {
return(CORD_balance((CORD)result));
} else {
result->len = (word)result_len;
result->left = x;
result->right = y;
+ GC_end_stubborn_change(result);
if (depth >= MAX_DEPTH) {
return(CORD_balance((CORD)result));
} else {
result->len = (word)len;
result->fn = fn;
result->client_data = client_data;
+ GC_end_stubborn_change(result);
return (CordRep *)result;
}
}
if (sa == 0) OUT_OF_MEMORY;
sa->sa_cord = (CordRep *)x;
sa->sa_index = i;
+ GC_end_stubborn_change(sa);
result = CORD_from_fn_inner(f, (void *)sa, n);
if ((CORD)result != CORD_EMPTY && 0 == result -> function.null)
result -> function.header = SUBSTR_HDR;
new_cache -> tag = DIV_LINE_SZ(file_pos);
/* Store barrier goes here. */
ATOMIC_WRITE(state -> lf_cache[line_no], new_cache);
+ GC_end_stubborn_change((/* no volatile */ void *)(state -> lf_cache
+ + line_no));
state -> lf_current = line_start + LINE_SZ;
return(new_cache->data[MOD_LINE_SZ(file_pos)]);
}
current_map_size++;
if (map -> line < start_line - LINES && map -> previous != 0) {
map -> previous = map -> previous -> previous;
+ GC_end_stubborn_change(map);
}
map = map -> previous;
} while (map != 0);
new_map -> line = line;
new_map -> pos = pos;
new_map -> previous = current_map;
+ GC_end_stubborn_change(new_map);
current_map = new_map;
current_map_size++;
}
new_file -> file_contents = current = s;
current_len = CORD_len(s);
new_file -> previous = now;
- if (now != 0) now -> map = current_map;
+ GC_end_stubborn_change(new_file);
+ if (now != NULL) {
+ now -> map = current_map;
+ GC_end_stubborn_change(now);
+ }
now = new_file;
}
}
}
screen[i] = s;
+ GC_end_stubborn_change(screen + i);
}
}
#else
add_hist(initial);
now -> map = current_map;
now -> previous = now; /* Can't back up further: beginning of the world */
+ GC_end_stubborn_change(now);
need_redisplay = ALL;
fix_cursor();
}