[ 
https://issues.apache.org/jira/browse/THRIFT-5881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kevin Rodgers updated THRIFT-5881:
----------------------------------
    Environment:     (was: {quote}static void 
test_object_finalize (GObject *object)
{
    TestObject *tobject = TEST_OBJECT (object);

    /* satisfy -Wall in case we don't use tobject */
    THRIFT_UNUSED_VAR (tobject);
    if (tobject->versions != NULL)
    {
        g_free(tobject->versions);
        tobject->versions = NULL;
    }
    g_datalist_clear(&object->qdata); // *ADDED* thaw queue, free memory
}
{quote})

> [Glib] The {class}_finalize method created by c_glib generator is leaking 
> memory
> --------------------------------------------------------------------------------
>
>                 Key: THRIFT-5881
>                 URL: https://issues.apache.org/jira/browse/THRIFT-5881
>             Project: Thrift
>          Issue Type: Bug
>          Components: C glib - Compiler
>            Reporter: Kevin Rodgers
>            Priority: Major
>
> In newer versions of glib the {{g_object_unref}} call has been updated to 
> freeze the object’s notification queue. This causes memory to be allocated 
> and saved in 
> [object->qdata|https://github.com/GNOME/glib/blob/c1e8174992182d7a6e6499ea9ab2cf76ad81a3ca/gobject/gobject.c#L4828].This
>  memory is freed when the notification queue is thawed, which usually happens 
> in the \{class}_finalize method call of the object’s parent class.
> In the thrift generated finalize method there is no call to finalize the 
> parent object and the memory that has been allocated to freeze notifications 
> is lost. This causes the process size to increase as objects are created and 
> destroyed. I have fixed this in my environment by updating 
> [t_c_glib_generator.cc|https://github.com/apache/thrift/blob/master/compiler/cpp/src/thrift/generate/t_c_glib_generator.cc#L3306]{color:#172b4d}
>  to call g_datalist_clear{color} at the very end of each \{class}_finalize 
> method.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to