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.

Reply via email to