
On Thu, Apr 19, 2012 at 04:24:35PM +0300, Zeeshan Ali (Khattak) wrote:
On Thu, Apr 19, 2012 at 11:52 AM, Christophe Fergeau <cfergeau@redhat.com> wrote:
On Thu, Apr 19, 2012 at 03:12:01AM +0300, Zeeshan Ali (Khattak) wrote:
From: "Zeeshan Ali (Khattak)" <zeeshanak@gnome.org> +static void +gvir_domain_get_info_helper(GSimpleAsyncResult *res, + GObject *object, + GCancellable *cancellable G_GNUC_UNUSED) +{ + GVirDomain *dom = GVIR_DOMAIN(object); + GVirDomainInfo *info; + GError *err = NULL; + + info = gvir_domain_get_info(dom, &err); + if (err) + g_simple_async_result_take_error(res, err); + else + g_simple_async_result_set_op_res_gpointer(res, info, NULL);
Shouldn't the last parameter be gvir_domain_info_free?
No, we give this info to user in the finalize call:
Looking at GSimpleAsyncResult documentation and use, it seems customary to pass a GDestroyNotify function here, and to ref the returned object in the _finish function if needed. It seems it's perfectly valid to call gvir_domain_get_info_async() with a NULL callback, or not to call _finish if you are not interested in the result. If you don't pass a non-NULL GDestroyNotify to set_op_res_gpointer, I don't see how you can avoid a memory leak in these cases. Think also of an error (cancellation) occurring between the call to _helper and the call to finish. Christophe