Thanks for clarifying! On Sat, Dec 31, 2016, 1:02 PM 'Keith Randall' via golang-nuts < golang-nuts@googlegroups.com> wrote:
> > > On Friday, December 30, 2016 at 1:26:26 PM UTC-8, Justin Israel wrote: > > Hi, > > Regarding this thread: > https://forum.golangbridge.org/t/curious-about-runtime-keepalive-usage/3530 > > And also the original problem example from Russ: > https://github.com/golang/go/issues/15277#issuecomment-221768072 > > ... I just wanted to get clarification on this situation: > > func f(ptr *Object) { > C.doStuff(ptr.c_ptr) > } > func main() { > f(NewObject()) > } > > > > > Yes, in this situation it is possible that the finalizer of ptr is > executed before C.doStuff is executed. You will need a > runtime.KeepAlive(ptr) call after the C.doStuff call. > (I'm assuming NewObject sets up a finalizer on the returned Object.) > > > > If someone were to create a transient object as an argument to a function > call (keeping no reference to it), and then the function uses a field that > is a C pointer to call into a C function, would it be possible for the > wrapping Go object to get collected and trigger a finalizer which could > cause the C memory to get freed during that C calls? > > And another variation, just in case this makes a difference: > > func f(ptr *Object) { > c_ptr := ptr.c_ptr > C.doStuff(c_ptr) > C.doStuff2(c_ptr) > } > > > > > Same thing here. > > > Basically, I wasn't sure whether the ptr object would be considered live > or not, based on whether the caller hangs onto it or not. > > Justin > > > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.