c_glib_generator.cc generates leaking code for cassandra_client_get_slice() and cassandra_client_get() ------------------------------------------------------------------------------------------------------
Key: THRIFT-1389 URL: https://issues.apache.org/jira/browse/THRIFT-1389 Project: Thrift Issue Type: Bug Components: C glib - Compiler, C glib - Library Affects Versions: 0.6.1 Environment: Used with Cassandra 0.8.4 on Linux 2.6.32 with x86_64 Reporter: Jerry Gally The generated cassandra.c cassandra_client_recv_get_slice() code for list processing instantiates an object of TYPE_COLUMN_OR_SUPER_COLUMN then calls thrift_struct_read() as in the following code snippet,: <... snip> switch (fid) { case 0: if (ftype == T_LIST) { { guint32 size; ThriftType element_type; if ((ret = thrift_protocol_read_list_begin (protocol, &element_type, &size, error)) < 0) return 0; xfer += ret; /* iterate through list elements */ guint32 i; for (i = 0; i < size; i++) { ColumnOrSuperColumn * _elem19; _elem19 = g_object_new (TYPE_COLUMN_OR_SUPER_COLUMN, NULL); //printf("\nrecv_slice made %p\n", _elem19->column); if ((ret = thrift_struct_read (THRIFT_STRUCT (_elem19), protocol, error)) < 0) <\snip ...> When the object of TYPE_COLUMN_OR_SUPER_COLUMN is instantiated, it in-turn instantiates a child of TYPE_COLUMN: <... snip> void column_or_super_column_instance_init (ColumnOrSuperColumn * object) { /* satisfy -Wall */ THRIFT_UNUSED_VAR (object); object->column = g_object_new (TYPE_COLUMN, NULL); object->__isset_column = FALSE; </snip ...> But this instance reference is lost and replaced by a new TYPE_COLUMN instantiation reference when the column member is read by column_or_super_column_read() within the same execution context of the top level cassandra_client_recv_get_slice() call: <... snip> switch (fid) { case 1: if (ftype == T_STRUCT) { this_object->column = g_object_new (TYPE_COLUMN, NULL); if ((ret = thrift_struct_read (THRIFT_STRUCT (this_object->column), protocol, error)) < 0) </snip ...> The above snippits/logic/leak described above for cassandra_client_get_slice() also apply for cassandra_client_get(). -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira