diff --git a/runtime.c b/runtime.c index 98473c3b..1a2ecfd2 100644 --- a/runtime.c +++ b/runtime.c @@ -36,7 +36,17 @@ object Cyc_global_set2(void *thd, object cont, object * glo, object value) value = share_object(thd, NULL, value, &do_gc); gc_mut_update((gc_thread_data *) thd, *glo, value); *(glo) = value; + // 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 + // can we use add_mutation and add cvar as a case when transporting mutations? ((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 the upcoming GC. or if there is no GC scheduled, just update it directly now +*/ + +// TODO: not applicable here but after all entry_pts are executed the app should run a minor gc to get globals off the stack! + if (do_gc) { object buf[1]; buf[0] = value; GC(thd, cont, buf, 1);