Skip to content

Make tests easily runnable with gdb and valgrind (+ add it to CI and fix leaks)

Marco Trevisan requested to merge 3v1n0/libfprint:tests-with-wrappers into master

Make possible to run the tests using valgrind or gdb, and include a CI job for valgrind.

As per this, fix various leaks I found during debugging this, see details for more infos

==9350== 
==9350== HEAP SUMMARY:
==9350==     in use at exit: 4,748,662 bytes in 10,877 blocks
==9350==   total heap usage: 909,517 allocs, 898,640 frees, 105,302,961 bytes allocated
==9350== 
==9350== 16 bytes in 2 blocks are definitely lost in loss record 362 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x59025E8: g_malloc (gmem.c:99)
==9350==    by 0x591C8E3: g_strdup (gstrfuncs.c:363)
==9350==    by 0x59393CF: g_variant_valist_get_nnp (gvariant.c:4881)
==9350==    by 0x59393CF: g_variant_valist_get_leaf (gvariant.c:5051)
==9350==    by 0x59393CF: g_variant_valist_get (gvariant.c:5232)
==9350==    by 0x59390C7: g_variant_valist_get (gvariant.c:5267)
==9350==    by 0x5939FFF: g_variant_get_va (gvariant.c:5494)
==9350==    by 0x593A29F: g_variant_get (gvariant.c:5441)
==9350==    by 0x7165203: fp_print_deserialize (fp-print.c:1018)
==9350==    by 0x485681D: ffi_call_unix64 (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==9350==    by 0x48561EE: ffi_call (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==9350==    by 0x588007C: ??? (in /usr/lib/python3/dist-packages/gi/_gi.cpython-37m-x86_64-linux-gnu.so)
==9350==    by 0x587713B: ??? (in /usr/lib/python3/dist-packages/gi/_gi.cpython-37m-x86_64-linux-gnu.so)
==9350== 
==9350== 24 bytes in 1 blocks are possibly lost in loss record 416 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0xA2047FE: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA204AE1: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA1FFEB5: libusb_init (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0x6DF5EF2: g_usb_context_initable_init (gusb-context.c:609)
==9350==    by 0x5B40679: g_initable_new_valist (ginitable.c:248)
==9350==    by 0x5B4072C: g_initable_new (ginitable.c:162)
==9350==    by 0x715E02D: fp_context_init (fp-context.c:250)
==9350==    by 0x5A0A6AF: g_type_create_instance (gtype.c:1867)
==9350==    by 0x59EC5CC: g_object_new_internal (gobject.c:1827)
==9350==    by 0x59EE044: g_object_newv (gobject.c:2065)
==9350==    by 0x586DD8D: ??? (in /usr/lib/python3/dist-packages/gi/_gi.cpython-37m-x86_64-linux-gnu.so)
==9350== 
==9350== 24 bytes in 1 blocks are possibly lost in loss record 417 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0xA2047FE: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA204B42: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA1FFEB5: libusb_init (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0x6DF5EF2: g_usb_context_initable_init (gusb-context.c:609)
==9350==    by 0x5B40679: g_initable_new_valist (ginitable.c:248)
==9350==    by 0x5B4072C: g_initable_new (ginitable.c:162)
==9350==    by 0x715E02D: fp_context_init (fp-context.c:250)
==9350==    by 0x5A0A6AF: g_type_create_instance (gtype.c:1867)
==9350==    by 0x59EC5CC: g_object_new_internal (gobject.c:1827)
==9350==    by 0x59EE044: g_object_newv (gobject.c:2065)
==9350==    by 0x586DD8D: ??? (in /usr/lib/python3/dist-packages/gi/_gi.cpython-37m-x86_64-linux-gnu.so)
==9350== 
==9350== 320 bytes in 1 blocks are possibly lost in loss record 1,324 of 1,734
==9350==    at 0x483CD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x4013E0A: allocate_dtv (dl-tls.c:286)
==9350==    by 0x4013E0A: _dl_allocate_tls (dl-tls.c:532)
==9350==    by 0x4A65382: allocate_stack (allocatestack.c:622)
==9350==    by 0x4A65382: pthread_create@@GLIBC_2.2.5 (pthread_create.c:662)
==9350==    by 0xA20A383: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA20903F: ??? (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0xA1FFEA2: libusb_init (in /lib/x86_64-linux-gnu/libusb-1.0.so.0.2.0)
==9350==    by 0x6DF5EF2: g_usb_context_initable_init (gusb-context.c:609)
==9350==    by 0x5B40679: g_initable_new_valist (ginitable.c:248)
==9350==    by 0x5B4072C: g_initable_new (ginitable.c:162)
==9350==    by 0x715E02D: fp_context_init (fp-context.c:250)
==9350==    by 0x5A0A6AF: g_type_create_instance (gtype.c:1867)
==9350==    by 0x59EC5CC: g_object_new_internal (gobject.c:1827)
==9350== 
==9350== 5,528 (48 direct, 5,480 indirect) bytes in 1 blocks are definitely lost in loss record 1,690 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x59025E8: g_malloc (gmem.c:99)
==9350==    by 0x591AA55: g_slice_alloc (gslice.c:1024)
==9350==    by 0x593BE99: g_variant_get_child_value (gvariant-core.c:1087)
==9350==    by 0x593943F: g_variant_valist_get_nnp (gvariant.c:4934)
==9350==    by 0x593943F: g_variant_valist_get_leaf (gvariant.c:5051)
==9350==    by 0x593943F: g_variant_valist_get (gvariant.c:5232)
==9350==    by 0x59390C7: g_variant_valist_get (gvariant.c:5267)
==9350==    by 0x5939FFF: g_variant_get_va (gvariant.c:5494)
==9350==    by 0x593A29F: g_variant_get (gvariant.c:5441)
==9350==    by 0x7165203: fp_print_deserialize (fp-print.c:1018)
==9350==    by 0x485681D: ffi_call_unix64 (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==9350==    by 0x48561EE: ffi_call (in /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4)
==9350==    by 0x588007C: ??? (in /usr/lib/python3/dist-packages/gi/_gi.cpython-37m-x86_64-linux-gnu.so)
==9350== 
==9350== 7,692 (96 direct, 7,596 indirect) bytes in 3 blocks are definitely lost in loss record 1,694 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x59025E8: g_malloc (gmem.c:99)
==9350==    by 0x591AA55: g_slice_alloc (gslice.c:1024)
==9350==    by 0x58CC756: g_ptr_array_sized_new (garray.c:1077)
==9350==    by 0x58CC952: g_ptr_array_new_with_free_func (garray.c:1139)
==9350==    by 0x716443B: fpi_print_set_type (fp-print.c:582)
==9350==    by 0x716620F: fpi_image_device_minutiae_detected (fp-image-device.c:430)
==9350==    by 0x5B76EA8: g_task_return_now (gtask.c:1212)
==9350==    by 0x5B76EEC: complete_in_idle_cb (gtask.c:1226)
==9350==    by 0x58FC81D: g_main_dispatch (gmain.c:3179)
==9350==    by 0x58FC81D: g_main_context_dispatch (gmain.c:3844)
==9350==    by 0x58FCBCF: g_main_context_iterate.isra.0 (gmain.c:3917)
==9350==    by 0x58FCC72: g_main_context_iteration (gmain.c:3978)
==9350== 
==9350== 14,560 (1,456 direct, 13,104 indirect) bytes in 26 blocks are definitely lost in loss record 1,709 of 1,734
==9350==    at 0x5A0A594: g_type_create_instance (gtype.c:1845)
==9350==    by 0x59EC5CC: g_object_new_internal (gobject.c:1827)
==9350==    by 0x59EE507: g_object_new_valist (gobject.c:2152)
==9350==    by 0x59EE85C: g_object_new (gobject.c:1670)
==9350==    by 0x5B70A1F: g_socket_listener_accept_finish (gsocketlistener.c:963)
==9350==    by 0x71870EC: new_connection_cb (virtual-image.c:190)
==9350==    by 0x5B76EA8: g_task_return_now (gtask.c:1212)
==9350==    by 0x5B77A7C: g_task_return.part.0 (gtask.c:1281)
==9350==    by 0x5B6FC35: accept_ready (gsocketlistener.c:818)
==9350==    by 0x5B65E2A: socket_source_dispatch (gsocket.c:3961)
==9350==    by 0x58FC81D: g_main_dispatch (gmain.c:3179)
==9350==    by 0x58FC81D: g_main_context_dispatch (gmain.c:3844)
==9350==    by 0x58FCBCF: g_main_context_iterate.isra.0 (gmain.c:3917)
==9350== 
==9350== 59,472 bytes in 1 blocks are possibly lost in loss record 1,723 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x59025E8: g_malloc (gmem.c:99)
==9350==    by 0x718C800: binarize_image_V2 (binar.c:217)
==9350==    by 0x718C9AC: binarize_V2 (binar.c:135)
==9350==    by 0x718E7FA: lfs_detect_minutiae_V2 (detect.c:272)
==9350==    by 0x718F38D: get_minutiae (getmin.c:123)
==9350==    by 0x7162AEB: fp_image_detect_minutiae_thread_func (fp-image.c:310)
==9350==    by 0x5B77BA1: g_task_thread_pool_thread (gtask.c:1410)
==9350==    by 0x59269F3: g_thread_pool_thread_proxy (gthreadpool.c:308)
==9350==    by 0x59262B0: g_thread_proxy (gthread.c:805)
==9350==    by 0x4A64668: start_thread (pthread_create.c:479)
==9350==    by 0x498C322: clone (clone.S:95)
==9350== 
==9350== 2,614,216 (2,240 direct, 2,611,976 indirect) bytes in 20 blocks are definitely lost in loss record 1,734 of 1,734
==9350==    at 0x483A7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9350==    by 0x59025E8: g_malloc (gmem.c:99)
==9350==    by 0x591AA55: g_slice_alloc (gslice.c:1024)
==9350==    by 0x591B07D: g_slice_alloc0 (gslice.c:1050)
==9350==    by 0x5A0A615: g_type_create_instance (gtype.c:1849)
==9350==    by 0x59EC5CC: g_object_new_internal (gobject.c:1827)
==9350==    by 0x59EE507: g_object_new_valist (gobject.c:2152)
==9350==    by 0x59EE85C: g_object_new (gobject.c:1670)
==9350==    by 0x71661FF: fpi_image_device_minutiae_detected (fp-image-device.c:429)
==9350==    by 0x5B76EA8: g_task_return_now (gtask.c:1212)
==9350==    by 0x5B76EEC: complete_in_idle_cb (gtask.c:1226)
==9350==    by 0x58FC81D: g_main_dispatch (gmain.c:3179)
==9350==    by 0x58FC81D: g_main_context_dispatch (gmain.c:3844)
==9350== 
==9350== LEAK SUMMARY:
==9350==    definitely lost: 3,856 bytes in 52 blocks
==9350==    indirectly lost: 2,632,676 bytes in 5,658 blocks
==9350==      possibly lost: 59,840 bytes in 4 blocks
==9350==    still reachable: 618,603 bytes in 1,693 blocks
==9350==                       of which reachable via heuristic:
==9350==                         length64           : 1,600 bytes in 37 blocks
==9350==                         newarray           : 1,712 bytes in 27 blocks
==9350==         suppressed: 1,406,871 bytes in 3,309 blocks
==9350== Reachable blocks (those to which a pointer was found) are not shown.
==9350== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==9350== 
==9350== For lists of detected and suppressed errors, rerun with: -s
==9350== ERROR SUMMARY: 9 errors from 9 contexts (suppressed: 2302 from 394)
1/1 virtual-image                           OK      74.55 s 

Ok:                    1
Expected Fail:         0
Fail:                  0
Unexpected Pass:       0
Skipped:               0
Timeout:               0

Merge request reports