wangyunjian created THRIFT-5122:
-----------------------------------

             Summary: Fix memory leak in c_glib tutorial server
                 Key: THRIFT-5122
                 URL: https://issues.apache.org/jira/browse/THRIFT-5122
             Project: Thrift
          Issue Type: Bug
          Components: Tutorial
    Affects Versions: 0.13.0
            Reporter: wangyunjian
            Assignee: wangyunjian


The memory leak was triggered on running c_glib tutorial server. The memory 
used by a ThriftStruct's properties don't need to call g_strdup and will be 
malloced on set property. And the error object need to be freed.

Leak:
Direct leak of 19 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030ae8 in __interceptor_malloc (/usr/lib64/libasan.so.5+0xefae8)
 #1 0x7f17430851d5 in g_malloc (/usr/lib64/libglib-2.0.so.0+0x531d5)
 #2 0x7f174309eb32 in g_strdup (/usr/lib64/libglib-2.0.so.0+0x6cb32)
 #3 0x403285 in tutorial_calculator_handler_calculate 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:233
 #4 0x4081e4 in calculator_handler_calculate gen-c_glib/calculator.c:713
 #5 0x409870 in calculator_processor_process_calculate 
gen-c_glib/calculator.c:1030
 #6 0x40a483 in calculator_processor_dispatch_call gen-c_glib/calculator.c:1198
 #7 0x7f1743d1ee53 in thrift_dispatch_processor_process 
(/usr/lib64/libthrift_c_glib.so.0+0xee53)
 #8 0x7f1743d32d11 in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:58
 #9 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #10 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #11 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #12 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

Direct leak of 16 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030ae8 in __interceptor_malloc (/usr/lib64/libasan.so.5+0xefae8)
 #1 0x7f17430851d5 in g_malloc (/usr/lib64/libglib-2.0.so.0+0x531d5)
 #2 0x7f174309ce06 in g_slice_alloc (/usr/lib64/libglib-2.0.so.0+0x6ae06)
 #3 0x7f174306a350 in g_error_new_valist (/usr/lib64/libglib-2.0.so.0+0x38350)
 #4 0x7f174306a75e in g_set_error (/usr/lib64/libglib-2.0.so.0+0x3875e)
 #5 0x7f1743d2df8e in thrift_server_socket_accept 
src/thrift/c_glib/transport/thrift_server_socket.c:147
 #6 0x7f1743d2d17d in thrift_server_transport_accept 
(/usr/lib64/libthrift_c_glib.so.0+0x1d17d)
 #7 0x7f1743d3298a in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:42
 #8 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #9 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #10 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #11 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

Direct leak of 2 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030ae8 in __interceptor_malloc (/usr/lib64/libasan.so.5+0xefae8)
 #1 0x7f17430851d5 in g_malloc (/usr/lib64/libglib-2.0.so.0+0x531d5)
 #2 0x7f174309eb32 in g_strdup (/usr/lib64/libglib-2.0.so.0+0x6cb32)
 #3 0x403569 in tutorial_calculator_handler_calculate 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:265
 #4 0x4081e4 in calculator_handler_calculate gen-c_glib/calculator.c:713
 #5 0x409870 in calculator_processor_process_calculate 
gen-c_glib/calculator.c:1030
 #6 0x40a483 in calculator_processor_dispatch_call gen-c_glib/calculator.c:1198
 #7 0x7f1743d1ee53 in thrift_dispatch_processor_process 
(/usr/lib64/libthrift_c_glib.so.0+0xee53)
 #8 0x7f1743d32d11 in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:58
 #9 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #10 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #11 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #12 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

Direct leak of 2 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030ae8 in __interceptor_malloc (/usr/lib64/libasan.so.5+0xefae8)
 #1 0x7f17430851d5 in g_malloc (/usr/lib64/libglib-2.0.so.0+0x531d5)
 #2 0x7f174309eb32 in g_strdup (/usr/lib64/libglib-2.0.so.0+0x6cb32)
 #3 0x7f1743af773c (/usr/lib64/libgobject-2.0.so.0+0x3a73c)
 #4 0x7f1743ad60a5 in g_object_get_valist 
(/usr/lib64/libgobject-2.0.so.0+0x190a5)
 #5 0x7f1743ad6463 in g_object_get (/usr/lib64/libgobject-2.0.so.0+0x19463)
 #6 0x403a2b in tutorial_calculator_handler_get_struct 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:333
 #7 0x40c76c in shared_service_handler_get_struct 
gen-c_glib/shared_service.c:325
 #8 0x40cc0d in shared_service_processor_process_get_struct 
gen-c_glib/shared_service.c:416
 #9 0x40d1f5 in shared_service_processor_dispatch_call 
gen-c_glib/shared_service.c:498
 #10 0x40a4d4 in calculator_processor_dispatch_call gen-c_glib/calculator.c:1206
 #11 0x7f1743d1ee53 in thrift_dispatch_processor_process 
(/usr/lib64/libthrift_c_glib.so.0+0xee53)
 #12 0x7f1743d32d11 in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:58
 #13 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #14 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #15 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #16 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

Direct leak of 2 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030ae8 in __interceptor_malloc (/usr/lib64/libasan.so.5+0xefae8)
 #1 0x7f17430851d5 in g_malloc (/usr/lib64/libglib-2.0.so.0+0x531d5)
 #2 0x7f174309eb32 in g_strdup (/usr/lib64/libglib-2.0.so.0+0x6cb32)
 #3 0x403a5a in tutorial_calculator_handler_get_struct 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:337
 #4 0x40c76c in shared_service_handler_get_struct 
gen-c_glib/shared_service.c:325
 #5 0x40cc0d in shared_service_processor_process_get_struct 
gen-c_glib/shared_service.c:416
 #6 0x40d1f5 in shared_service_processor_dispatch_call 
gen-c_glib/shared_service.c:498
 #7 0x40a4d4 in calculator_processor_dispatch_call gen-c_glib/calculator.c:1206
 #8 0x7f1743d1ee53 in thrift_dispatch_processor_process 
(/usr/lib64/libthrift_c_glib.so.0+0xee53)
 #9 0x7f1743d32d11 in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:58
 #10 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #11 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #12 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #13 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

Indirect leak of 54 byte(s) in 1 object(s) allocated from:
 #0 0x7f1744030f28 in __interceptor_realloc (/usr/lib64/libasan.so.5+0xeff28)
 #1 0x7f17429537d9 in __GI___vasprintf_chk (/usr/lib64/libc.so.6+0x10d7d9)
 #2 0x7f17430c5a6c in g_vasprintf (/usr/lib64/libglib-2.0.so.0+0x93a6c)
 #3 0x7f174309ecd0 in g_strdup_vprintf (/usr/lib64/libglib-2.0.so.0+0x6ccd0)
 #4 0x7f174306a365 in g_error_new_valist (/usr/lib64/libglib-2.0.so.0+0x38365)
 #5 0x7f174306a75e in g_set_error (/usr/lib64/libglib-2.0.so.0+0x3875e)
 #6 0x7f1743d2df8e in thrift_server_socket_accept 
src/thrift/c_glib/transport/thrift_server_socket.c:147
 #7 0x7f1743d2d17d in thrift_server_transport_accept 
(/usr/lib64/libthrift_c_glib.so.0+0x1d17d)
 #8 0x7f1743d3298a in thrift_simple_server_serve 
src/thrift/c_glib/server/thrift_simple_server.c:42
 #9 0x7f1743d31b9a in thrift_server_serve 
src/thrift/c_glib/server/thrift_server.c:108
 #10 0x404113 in main 
/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/c_glib_server.c:506
 #11 0x7f1742869872 in __libc_start_main (/usr/lib64/libc.so.6+0x23872)
 #12 0x402a0d in _start 
(/mnt/hgfs/share/thrift-0.13.0/tutorial/c_glib/.libs/tutorial_server+0x402a0d)

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to