Hi Bil,

I think I found a bug:
When creating an object with

  s7_pointer obj = s7_make_c_object(sc, type_foo, new Foo{});
  s7_pointer methods = s7_eval_c_string(
      sc, "(inlet :write foo-write))");
  // Without gc_protect the c_object loses its methods after gc
  if(arg_gc_protect == 1) s7_gc_protect(sc, methods);
  s7_c_object_set_let(sc, obj, methods);
  return s7_openlet(sc, obj);

(as the comment says) without gc_protect of the c_object let/methods, the
c_object loses its methods after gc.
I'd assume that since we "set_let" to a value that still is "alive", it's
"let/methods objects" would also not be garbage collected (at least I
assume that the let is getting gc'ed).

I'm attaching a demo program
- ./main 0 # no gc_protect, errors
- ./main 1 # gc_protect, no errors

<<attachment: bug-cc.zip>>

_______________________________________________
Cmdist mailing list
[email protected]
https://cm-mail.stanford.edu/mailman/listinfo/cmdist

Reply via email to