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)