Steve Fink wrote:
I'm confused by nci.pmc's mark() routine. It calls pobject_lives() on the ->cache.struct_val pointer. But in set_string_keyed(), that seems to be set to a pointer to a function, which is definitely not a PObj*.
Yes, that's right.
The ->data field, on the other hand, appears to be a PObj*.
No the data field is either the statically built native calling thunk from nci.c:build_call_func() or a malloced thunk from JITs equivalent.
... Is the below patch correct?
Almost :-) No, we don't have a PMC to mark finally, the line PObj_custom_mark_SET(SELF); is wrong (and makes the mark obsolete) Thanks for that analysis, leo