On Thu, Jan 15, 2015 at 4:54 PM, Kevin Wolf <kw...@redhat.com> wrote: > Hm, I guess there might be uses for holding references after the > coroutine has exited if there are external references to the coroutine, > but is it useful not to drop one reference after the coroutine exits? I > guess in most cases, and in qemu always, the caller isn't aware that the > coroutine ended, so requiring an explicit call isn't as nice as it could > be.
I thought it would be better to make memory management explicit by the caller. However, I can also see how inconvenient it is for fire and forget cases. Unfortunately, the coroutine can't ref/unref() itself at beginning and end since the "unfinished" warning would show up, also it feels wrong to unref itself inside the coroutine. So I changed it to take an implicit ref on resume (similar to g_task_run_in_thread for ex) and unref automatically when the coroutine finishes. So unlike qemu-coroutine, you still have a strong reference returned, and must unref it at some point. This should be similar to GThread/GTask I think. Fire and forget fix: https://github.com/elmarco/gcoroutine/commit/7c88e1f90bb812481883da512a5d7d3b1e7d6028 Copyright fix: https://github.com/elmarco/gcoroutine/commit/4a513d92e1377a5cd3526eeb8ed974f0a3221636 -- Marc-André Lureau