Kevin Rodgers created THRIFT-5881:
-------------------------------------
Summary: [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
Environment: {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}
Reporter: Kevin Rodgers
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)