on master help sign in
Small GC fix, and not for message passing
commite2587d5c34aa9e84f63a868b6f3a3c0edc89df2c authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateSun 23 Sep 2012, 14:40 (14 years ago) parent3b27284
2 files changed+6
rts/idris_gc.c+3 rts/idris_rts.c+3
rts/idris_gc.c+3
@@ -86,6 +86,9 @@ void gc(VM* vm) {
8686 for(root = vm->valstack; root < vm->valstack_top; ++root) {
8787 *root = copy(vm, *root);
8888 }
89+ for(root = vm->inbox_ptr; root < vm->inbox_write; ++root) {
90+ *root = copy(vm, *root);
91+ }
8992 vm->ret = copy(vm, vm->ret);
9093 vm->reg1 = copy(vm, vm->reg1);
9194
rts/idris_rts.c+3
@@ -414,6 +414,9 @@ VAL copyTo(VM* vm, VAL x) {
414414
415415// Add a message to another VM's message queue
416416void sendMessage(VM* sender, VM* dest, VAL msg) {
417+ // FIXME: If GC kicks in in the middle of the copy, we're in trouble.
418+ // Probably best check there is enough room in advance. (How?)
419+
417420 VAL dmsg = copyTo(dest, msg);
418421
419422 pthread_mutex_lock(&(dest->inbox_lock));