georust / geos

Rust bindings for GEOS
https://docs.rs/geos/
MIT License
119 stars 38 forks source link

CI on main failing on memory leaks #147

Open jayvdb opened 5 months ago

jayvdb commented 5 months ago

This has been occurring for quite a long time, so raising an issue to ensure it is either fixed, or the test runner enhanced to ignore the known problems.

https://github.com/georust/geos/actions/runs/7817187602/job/21324473886

find ./target/debug/deps -name "geos*"  -type f -executable | xargs -n 1 valgrind --leak-check=full --error-exitcode=42 --show-leak-kinds=all
==14626== Memcheck, a memory error detector
==14626== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==14626== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==14626== Command: ./target/debug/deps/geos-329262b61c72c019
==14626== 
==14626== Syscall param statx(file_name) points to unaddressable byte(s)
==14626==    at 0x4B33AAE: statx (statx.c:29)
==14626==    by 0x229188: statx (weak.rs:176)
==14626==    by 0x229188: std::sys::unix::fs::try_statx (fs.rs:161)
==14626==    by 0x21A892: file_attr (fs.rs:955)
==14626==    by 0x21A892: metadata (fs.rs:550)
==14626==    by 0x21A892: std::fs::buffer_capacity_required (fs.rs:718)
==14626==    by 0x21827F: read_to_end (fs.rs:746)
==14626==    by 0x21827F: quota (thread.rs:441)
==14626==    by 0x21827F: available_parallelism (thread.rs:312)
==14626==    by 0x21827F: std::thread::available_parallelism (mod.rs:1653)
==14626==    by 0x1C6C63: test::helpers::concurrency::get_concurrency (concurrency.rs:12)
==14626==    by 0x1BD0A8: call_once<fn() -> usize, ()> (function.rs:248)
==14626==    by 0x1BD0A8: unwrap_or_else<usize, fn() -> usize> (option.rs:825)
==14626==    by 0x1BD0A8: test::console::run_tests_console (console.rs:269)
==14626==    by 0x1D24F7: test::test_main (alloc.rs:[11](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:12)3)
==14626==    by 0x1D3473: test::test_main_static (lib.rs:132)
==14626==    by 0x1873B2: geos::main (lib.rs:1)
==14626==    by 0x14378A: core::ops::function::FnOnce::call_once (function.rs:248)
==14626==    by 0x19238D: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:[12](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:13)2)
==14626==    by 0x17D8B0: std::rt::lang_start::{{closure}} (rt.rs:166)
==14626==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==14626== 
==14626== Syscall param statx(buf) points to unaddressable byte(s)
==14626==    at 0x4B33AAE: statx (statx.c:29)
==14626==    by 0x229188: statx (weak.rs:176)
==14626==    by 0x229188: std::sys::unix::fs::try_statx (fs.rs:161)
==14626==    by 0x21A892: file_attr (fs.rs:955)
==14626==    by 0x21A892: metadata (fs.rs:550)
==14626==    by 0x21A892: std::fs::buffer_capacity_required (fs.rs:718)
==14626==    by 0x21827F: read_to_end (fs.rs:746)
==14626==    by 0x21827F: quota (thread.rs:441)
==14626==    by 0x21827F: available_parallelism (thread.rs:312)
==14626==    by 0x21827F: std::thread::available_parallelism (mod.rs:1653)
==14626==    by 0x1C6C63: test::helpers::concurrency::get_concurrency (concurrency.rs:12)
==14626==    by 0x1BD0A8: call_once<fn() -> usize, ()> (function.rs:248)
==14626==    by 0x1BD0A8: unwrap_or_else<usize, fn() -> usize> (option.rs:825)
==14626==    by 0x1BD0A8: test::console::run_tests_console (console.rs:269)
==14626==    by 0x1D24F7: test::test_main (alloc.rs:1[13](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:14))
==[14](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:15)626==    by 0x1D3473: test::test_main_static (lib.rs:132)
==14626==    by 0x1873B2: geos::main (lib.rs:1)
==14626==    by 0x14378A: core::ops::function::FnOnce::call_once (function.rs:248)
==14626==    by 0x19238D: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==14626==    by 0x17D8B0: std::rt::lang_start::{{closure}} (rt.rs:166)
==14626==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==14626== 

running 47 tests
test from_geo::test::closed_2_points_linear_ring ... ok
test from_geo::test::good_linear_ring ... ok
test from_geo::test::incorrect_multipolygon_test ... ok
test from_geo::test::empty_linear_ring ... ok
test from_geo::test::incorrect_polygon_not_closed ... ok
test from_geo::test::multipolygon_contains_test ... ok
test from_geo::test::polygon_contains_test ... ok
test from_geo::test::one_elt_linear_ring ... ok
test from_geo::test::test_conversion_multilinestring ... ok
test from_geo::test::test_conversion_multipoint ... ok
test from_geo::test::unclosed_linear_ring ... ok
test from_geo::test::two_elt_linear_ring ... ok
test from_geojson::test::geom_from_geojson_geometry_collection ... ok
test from_geojson::test::geom_from_geojson_line ... ok
test from_geojson::test::geom_from_geojson_multiline ... ok
test from_geojson::test::geom_from_geojson_multipoint ... ok
test from_geojson::test::geom_from_geojson_multipolygon ... ok
test from_geojson::test::geom_from_geojson_polygon ... ok
test from_geojson::test::geom_from_geojson_polygon_with_unclosed_interior_ring ... ok
test functions::test::check_geos_predicate_err_test ... ok
test from_geojson::test::geom_from_geojson_point ... ok
test functions::test::check_geos_predicate_ko_test ... ok
test functions::test::check_geos_predicate_ok_test ... ok
test spatial_index::test::test_strtree ... ok
test test::test_geom_creation_from_geoms ... ok
test test::test_error_multi_from_vec_single ... ok
test test::test_geometrycollection_from_vec_geometry ... ok
test test::test_get_geometry_n ... ok
test test::test_multilinestring_from_vec_single ... ok
test test::test_multipoint_from_vec_single ... ok
test test::test_multipolygon_from_vec_single ... ok
test test::test_prepared_geoms ... ok
test test::test_relationship ... ok
test test::test_wkt_rounding_precision ... ok
test to_geo::test::geom_to_geo_multipoint ... ok
test to_geojson::test::geom_to_geojson_line ... ok
test to_geojson::test::geom_to_geojson_linearring ... ok
test to_geo::test::geom_to_geo_polygon ... ok
test to_geojson::test::geom_to_geojson_geometry_collection ... ok
test to_geojson::test::geom_to_geojson_multiline ... ok
test to_geojson::test::geom_to_geojson_multipolygon ... ok
test to_geojson::test::geom_to_geojson_point ... ok
test to_geojson::test::geom_to_geojson_polygon ... ok
test to_geojson::test::geom_to_geojson_multipoint ... ok
test voronoi::test::geo_voronoi ... ok
test voronoi::test::wkt_voronoi_precision ... ok
test voronoi::test::simple_voronoi ... ok

test result: ok. 47 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.16s

==14626== 
==14626== HEAP SUMMARY:
==14626==     in use at exit: 56 bytes in 2 blocks
==14626==   total heap usage: 13,271 allocs, 13,269 frees, 1,011,084 bytes allocated
==14626== 
==14626== 16 bytes in 1 blocks are still reachable in loss record 1 of 2
==14626==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14626==    by 0x4CEBD42: geos::geom::GeometryFactory::GeometryFactory() (in /usr/local/lib/libgeos.so.3.6.5)
==14626==    by 0x4CEDF8C: geos::geom::GeometryFactory::getDefaultInstance() (in /usr/local/lib/libgeos.so.3.6.5)
==14626==    by 0x4867306: GEOS_init_r (in /usr/local/lib/libgeos_c.so.1.10.5)
==14626==    by 0x1385AE: geos::context_handle::ContextHandle::init_e (context_handle.rs:95)
==14626==    by 0x19E680: geos::coord_seq::CoordSeq::new (coord_seq.rs:64)
==14626==    by 0x141879: geos::from_geo::create_coord_seq (from_geo.rs:22)
==14626==    by 0x13062A: geos::from_geo::<impl core::convert::TryFrom<geos::from_geo::LineRing> for geos::geometry::Geometry>::try_from (from_geo.rs:147)
==14626==    by 0x141025: <T as core::convert::TryInto<U>>::try_into (mod.rs:593)
==14626==    by 0x19BA6D: geos::from_geo::test::closed_2_points_linear_ring (from_geo.rs:367)
==14626==    by 0x169539: geos::from_geo::test::closed_2_points_linear_ring::{{closure}} (from_geo.rs:365)
==14626==    by 0x14328D: core::ops::function::FnOnce::call_once (function.rs:248)
==14626== 
==14626== 40 bytes in 1 blocks are still reachable in loss record 2 of 2
==14626==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14626==    by 0x4CEDF81: geos::geom::GeometryFactory::getDefaultInstance() (in /usr/local/lib/libgeos.so.3.6.5)
==14626==    by 0x4867306: GEOS_init_r (in /usr/local/lib/libgeos_c.so.1.10.5)
==14626==    by 0x1385AE: geos::context_handle::ContextHandle::init_e (context_handle.rs:95)
==14626==    by 0x19E680: geos::coord_seq::CoordSeq::new (coord_seq.rs:64)
==14626==    by 0x141879: geos::from_geo::create_coord_seq (from_geo.rs:22)
==14626==    by 0x13062A: geos::from_geo::<impl core::convert::TryFrom<geos::from_geo::LineRing> for geos::geometry::Geometry>::try_from (from_geo.rs:147)
==14626==    by 0x141025: <T as core::convert::TryInto<U>>::try_into (mod.rs:593)
==14626==    by 0x19BA6D: geos::from_geo::test::closed_2_points_linear_ring (from_geo.rs:367)
==14626==    by 0x169539: geos::from_geo::test::closed_2_points_linear_ring::{{closure}} (from_geo.rs:365)
==14626==    by 0x14328D: core::ops::function::FnOnce::call_once (function.rs:248)
==14626==    by 0x1DD792: call_once<fn(), ()> (function.rs:248)
==14626==    by 0x1DD792: test::__rust_begin_short_backtrace (lib.rs:572)
==14626== 
==14626== LEAK SUMMARY:
==14626==    definitely lost: 0 bytes in 0 blocks
==14626==    indirectly lost: 0 bytes in 0 blocks
==14626==      possibly lost: 0 bytes in 0 blocks
==14626==    still reachable: 56 bytes in 2 blocks
==14626==         suppressed: 0 bytes in 0 blocks
==14626== 
==14626== For lists of detected and suppressed errors, rerun with: -s
==14626== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
==14674== Memcheck, a memory error detector
==14674== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==14674== Using Valgrind-3.[15](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:16).0 and LibVEX; rerun with -h for copyright info
==14674== Command: ./target/debug/deps/geos-0992edceede136[16](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:17)
==14674== 
==14674== Syscall param statx(file_name) points to unaddressable byte(s)
==14674==    at 0x4B33AAE: statx (statx.c:29)
==14674==    by 0x1A2D48: statx (weak.rs:[17](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:18)6)
==14674==    by 0x1A2D48: std::sys::unix::fs::try_statx (fs.rs:161)
==14674==    by 0x194452: file_attr (fs.rs:955)
==14674==    by 0x194452: metadata (fs.rs:550)
==14674==    by 0x194452: std::fs::buffer_capacity_required (fs.rs:7[18](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:19))
==14674==    by 0x[19](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:20)1E3F: read_to_end (fs.rs:746)
==14674==    by 0x191E3F: quota (thread.rs:441)
==14674==    by 0x191E3F: available_parallelism (thread.rs:312)
==14674==    by 0x191E3F: std::thread::available_parallelism (mod.rs:1653)
==14674==    by 0x15D5C3: test::helpers::concurrency::get_concurrency (concurrency.rs:12)
==14674==    by 0x153A08: call_once<fn() -> usize, ()> (function.rs:248)
==14674==    by 0x153A08: unwrap_or_else<usize, fn() -> usize> (option.rs:825)
==14674==    by 0x153A08: test::console::run_tests_console (console.rs:269)
==14674==    by 0x168E57: test::test_main (alloc.rs:113)
==14674==    by 0x169DD3: test::test_main_static (lib.rs:132)
==14674==    by 0x137942: geos::main (lib.rs:1)
==14674==    by 0x134A7A: core::ops::function::FnOnce::call_once (function.rs:248)
==14674==    by 0x1[20](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:21)3CD: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:1[22](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:23))
==14674==    by 0x137380: std::rt::lang_start::{{closure}} (rt.rs:166)
==14674==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==14674== 
==14674== Syscall param statx(buf) points to unaddressable byte(s)
==14674==    at 0x4B33AAE: statx (statx.c:29)
==14674==    by 0x1A2D48: statx (weak.rs:176)
==14674==    by 0x1A2D48: std::sys::unix::fs::try_statx (fs.rs:161)
==14674==    by 0x194452: file_attr (fs.rs:955)
==14674==    by 0x194452: metadata (fs.rs:550)
==14674==    by 0x194452: std::fs::buffer_capacity_required (fs.rs:718)
==14674==    by 0x191E3F: read_to_end (fs.rs:746)
==14674==    by 0x191E3F: quota (thread.rs:441)
==14674==    by 0x191E3F: available_parallelism (thread.rs:312)
==14674==    by 0x191E3F: std::thread::available_parallelism (mod.rs:1653)
==14674==    by 0x15D5C3: test::helpers::concurrency::get_concurrency (concurrency.rs:12)
==14674==    by 0x153A08: call_once<fn() -> usize, ()> (function.rs:[24](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:25)8)
==14674==    by 0x153A08: unwrap_or_else<usize, fn() -> usize> (option.rs:8[25](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:26))
==14674==    by 0x153A08: test::console::run_tests_console (console.rs:[26](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:27)9)
==14674==    by 0x168E57: test::test_main (alloc.rs:113)
==14674==    by 0x169DD3: test::test_main_static (lib.rs:132)
==14674==    by 0x137942: geos::main (lib.rs:1)
==14674==    by 0x134A7A: core::ops::function::FnOnce::call_once (function.rs:248)
==14674==    by 0x1203CD: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==14674==    by 0x137380: std::rt::lang_start::{{closure}} (rt.rs:166)
==14674==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==14674== 

running 14 tests
test functions::test::check_geos_predicate_err_test ... ok
test spatial_index::test::test_strtree ... ok
test functions::test::check_geos_predicate_ko_test ... ok
test functions::test::check_geos_predicate_ok_test ... ok
test test::test_error_multi_from_vec_single ... ok
test test::test_geom_creation_from_geoms ... ok
test test::test_get_geometry_n ... ok
test test::test_multilinestring_from_vec_single ... ok
test test::test_geometrycollection_from_vec_geometry ... ok
test test::test_multipoint_from_vec_single ... ok
test test::test_multipolygon_from_vec_single ... ok
test test::test_prepared_geoms ... ok
test test::test_relationship ... ok
test test::test_wkt_rounding_precision ... ok

test result: ok. 14 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.58s

==14674== 
==14674== HEAP SUMMARY:
==14674==     in use at exit: 56 bytes in 2 blocks
==14674==   total heap usage: 2,632 allocs, 2,630 frees, 303,076 bytes allocated
==14674== 
==14674== 16 bytes in 1 blocks are still reachable in loss record 1 of 2
==14674==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14674==    by 0x4CEBD42: geos::geom::GeometryFactory::GeometryFactory() (in /usr/local/lib/libgeos.so.3.6.5)
==14674==    by 0x4CEDF8C: geos::geom::GeometryFactory::getDefaultInstance() (in /usr/local/lib/libgeos.so.3.6.5)
==14674==    by 0x4867306: GEOS_init_r (in /usr/local/lib/libgeos_c.so.1.10.5)
==14674==    by 0x12614E: geos::context_handle::ContextHandle::init_e (context_handle.rs:95)
==14674==    by 0x13400E: geos::spatial_index::STRtree<I>::with_capacity (spatial_index.rs:26)
==14674==    by 0x133968: geos::spatial_index::test::test_strtree (spatial_index.rs:149)
==14674==    by 0x12CB69: geos::spatial_index::test::test_strtree::{{closure}} (spatial_index.rs:148)
==14674==    by 0x13499D: core::ops::function::FnOnce::call_once (function.rs:248)
==14674==    by 0x1740F2: call_once<fn(), ()> (function.rs:248)
==14674==    by 0x1740F2: test::__rust_begin_short_backtrace (lib.rs:572)
==14674==    by 0x172DCF: call_once<(), (dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global> (boxed.rs:1940)
==14674==    by 0x172DCF: call_once<(), alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>> (unwind_safe.rs:[27](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:28)1)
==14674==    by 0x172DCF: do_call<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panicking.rs:492)
==14674==    by 0x172DCF: try<(), core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>> (panicking.rs:456)
==14674==    by 0x172DCF: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panic.rs:137)
==14674==    by 0x172DCF: run_test_in_process (lib.rs:595)
==14674==    by 0x172DCF: test::run_test::run_test_inner::{{closure}} (lib.rs:489)
==14674==    by 0x13E413: {closure#1} (lib.rs:516)
==14674==    by 0x13E413: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==14674== 
==14674== 40 bytes in 1 blocks are still reachable in loss record 2 of 2
==14674==    at 0x483BE63: operator new(unsigned long) (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==14674==    by 0x4CEDF81: geos::geom::GeometryFactory::getDefaultInstance() (in /usr/local/lib/libgeos.so.3.6.5)
==14674==    by 0x4867[30](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:31)6: GEOS_init_r (in /usr/local/lib/libgeos_c.so.1.10.5)
==14674==    by 0x12614E: geos::context_handle::ContextHandle::init_e (context_handle.rs:95)
==14674==    by 0x13400E: geos::spatial_index::STRtree<I>::with_capacity (spatial_index.rs:26)
==14674==    by 0x1[33](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:34)968: geos::spatial_index::test::test_strtree (spatial_index.rs:149)
==14674==    by 0x12CB69: geos::spatial_index::test::test_strtree::{{closure}} (spatial_index.rs:148)
==14674==    by 0x1[34](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:35)99D: core::ops::function::FnOnce::call_once (function.rs:248)
==14674==    by 0x1740F2: call_once<fn(), ()> (function.rs:248)
==14674==    by 0x1740F2: test::__rust_begin_short_backtrace (lib.rs:572)
==14674==    by 0x172DCF: call_once<(), (dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global> (boxed.rs:1940)
==14674==    by 0x172DCF: call_once<(), alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>> (unwind_safe.rs:271)
==14674==    by 0x172DCF: do_call<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panicking.rs:492)
==14674==    by 0x172DCF: try<(), core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>> (panicking.rs:456)
==14674==    by 0x172DCF: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<alloc::boxed::Box<(dyn core::ops::function::FnOnce<(), Output=()> + core::marker::Send), alloc::alloc::Global>>, ()> (panic.rs:1[37](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:38))
==14674==    by 0x172DCF: run_test_in_process (lib.rs:595)
==14674==    by 0x172DCF: test::run_test::run_test_inner::{{closure}} (lib.rs:489)
==14674==    by 0x13E[41](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:42)3: {closure#1} (lib.rs:516)
==14674==    by 0x13E413: std::sys_common::backtrace::__rust_begin_short_backtrace (backtrace.rs:122)
==14674==    by 0x1[43](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:44)C66: {closure#0}<test::run_test::run_test_inner::{closure_env#1}, ()> (mod.rs:514)
==14674==    by 0x143C66: call_once<(), std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<test::run_test::run_test_inner::{closure_env#1}, ()>> (unwind_safe.rs:271)
==14674==    by 0x143C66: do_call<core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<test::run_test::run_test_inner::{closure_env#1}, ()>>, ()> (panicking.rs:492)
==14674==    by 0x143C66: try<(), core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<test::run_test::run_test_inner::{closure_env#1}, ()>>> (panicking.rs:[45](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:46)6)
==1[46](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:47)74==    by 0x143C66: catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<std::thread::{impl#0}::spawn_unchecked_::{closure#1}::{closure_env#0}<test::run_test::run_test_inner::{closure_env#1}, ()>>, ()> (panic.rs:137)
==14674==    by 0x143C66: {closure#1}<test::run_test::run_test_inner::{closure_env#1}, ()> (mod.rs:513)
==14674==    by 0x143C66: core::ops::function::FnOnce::call_once{{vtable-shim}} (function.rs:2[48](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:49))
==14674== 
==14674== LEAK SUMMARY:
==14674==    definitely lost: 0 bytes in 0 blocks
==14674==    indirectly lost: 0 bytes in 0 blocks
==14674==      possibly lost: 0 bytes in 0 blocks
==14674==    still reachable: [56](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:57) bytes in 2 blocks
==14[67](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:68)4==         suppressed: 0 bytes in 0 blocks
==146[74](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:75)== 
==[146](https://github.com/georust/geos/actions/runs/7817187602/job/21324473886#step:15:147)74== For lists of detected and suppressed errors, rerun with: -s

==14674== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)

lnicola commented 5 months ago

I was looking at the GEOS code and wondering what could be leaking in GeometryFactory::getDefaultInstance, but it turns out it was fixed in 3.8. We could add a suppression, but I'm not sure it's worth running Valgrind on those versions. Looking at https://pkgs.org/search/?q=geos, most distros have newer versions, except Debian 10 (EOL 2022, but still under LTS until July) and CentOS 7 (EOL this year).

The other one is https://github.com/rust-lang/rust/issues/68979, which requires a Valgrind that's newer than 2020. Not sure what's the best way to handle that. Running Valgrind on Ubuntu 22.04 would probably double the resource usage, but the repository is not very active right now.