[ 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)