[
https://issues.apache.org/jira/browse/THRIFT-5881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jens Geyer resolved THRIFT-5881.
--------------------------------
Fix Version/s: 0.26.0
Assignee: Jens Geyer
Resolution: Fixed
> [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, C glib - Library
> Reporter: Kevin Rodgers
> Assignee: Jens Geyer
> Priority: Major
> Fix For: 0.26.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> 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.
> {{Example:}}
> 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 to free memory}}
> {{}}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)