Attempt more efficient GC of globals

This commit is contained in:
Justin Ethier 2020-01-27 22:58:06 -05:00
parent 8aa484b79b
commit 73297f6519

View file

@ -424,7 +424,7 @@ object Cyc_global_set2(void *thd, object cont, object identifier, object * glo,
// TODO: if we don't do this how does GC know to transport the global?? // TODO: if we don't do this how does GC know to transport the global??
// don't really want to do this though because it is a performance nightmare // don't really want to do this though because it is a performance nightmare
// can we use add_mutation and add cvar as a case when transporting mutations? // can we use add_mutation and add cvar as a case when transporting mutations?
((gc_thread_data *) thd)->globals_changed = 1; // No longer needed?? // ((gc_thread_data *) thd)->globals_changed = 1; // No longer needed??
/* /*
in order to get rid of the above I think we need to find the corresponding cvar and ensure it is a root in order to get rid of the above I think we need to find the corresponding cvar and ensure it is a root
in the upcoming GC. or if there is no GC scheduled, just update it directly now in the upcoming GC. or if there is no GC scheduled, just update it directly now
@ -434,13 +434,14 @@ in the upcoming GC. or if there is no GC scheduled, just update it directly now
if (do_gc) { if (do_gc) {
object buf[1]; buf[0] = value; object buf[1]; buf[0] = value;
// object cv = ht_get(&globals_ht, identifier); object cv = ht_get(&globals_ht, identifier);
// gc_thread_data *data = (gc_thread_data *) thd; gc_thread_data *data = (gc_thread_data *) thd;
// // Ensure global is a root // Ensure global is a root
// data->mutations = vpbuffer_add(data->mutations, data->mutations = vpbuffer_add(data->mutations,
// &(data->mutation_buflen), &(data->mutation_buflen),
// data->mutation_count, data->mutation_count,
// cv); cv);
data->mutation_count++;
GC(thd, cont, buf, 1); GC(thd, cont, buf, 1);
} }
return value; return value;