-
Notifications
You must be signed in to change notification settings - Fork 363
Open
Description
With the versions from #120 (comment), I sometimes (nondeterministically, see also #124) get segfault, and valgrind reports Invalid read of size 4:
Details
# OMP_THREAD_LIMIT=1 valgrind bin/texrecon scene/::undistorted ~/small2.ply ~/texrecon-out-small-new2/outprefix --keep_unseen_faces --outlier_removal=gauss_damping --skip_geometric_visibility_test
==20303== Memcheck, a memory error detector
==20303== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==20303== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==20303== Command: bin/texrecon scene/::undistorted /root/small2.ply /root/texrecon-out-small-new2/outprefix --keep_unseen_faces --outlier_removal=gauss_damping --skip_geometric_visibility_test
==20303==
bin/texrecon (built on Jan 1 1970, 00:00:01)
Load and prepare mesh:
PLY Loader: comment VCGLIB generated
Reading PLY: 5150 verts... 5937 faces... done.
Generating texture views:
Initializing scene with 2215 views...
Initialized 2215 views (max ID is 2214), took 2071ms.
Loading 100%... done. (Took 0.54s)
Building adjacency graph:
Adding edges 100%... done. (Took 0.232s)
7068 total edges.
View selection:
Building BVH from 5937 faces... done. (Took: 617 ms)
Calculating face qualities 100%... done. (Took 219.853s)
Postprocessing face infos 100%... done. (Took 27.302s)
Maximum quality of a face within an image: 1136.17
Clamping qualities to 67.0405 within normalization.
Writing data cost file... done.
Optimizing:
Time[s] Energy
0 2462
2 2432
3 2395
3 2369
4 2364
4 2362
5 2361
6 2360
7 2360
7 2360
8 2360
9 2360
9 2360
10 2360
1 faces have not been seen
Took: 262.587s
Generating texture patches:
Running... done. (Took 69.704s)
366 texture patches.
Running global seam leveling:
Create matrices for optimization... done.
Lhs dimensionality: 5191 x 5191
Calculating adjustments:
Color channel 0: CG took 31 iterations. Residual is 8.52602e-05
Color channel 1: CG took 31 iterations. Residual is 8.46199e-05
Color channel 2: CG took 31 iterations. Residual is 8.38964e-05
Took 0.184 seconds
Adjusting texture patches 100%... done. (Took 8.399s)
Running local seam leveling:
Blending texture patches 100%...==20303== Invalid read of size 4
==20303== at 0x549136: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0x7d8abc8 is 4 bytes after a block of size 36 alloc'd
==20303== at 0x4C2D1AF: operator new(unsigned long) (in valgrind-3.13.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20303== by 0x54AAA7: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303==
==20303== Invalid read of size 8
==20303== at 0x5487FF: simple_laplacian(int, std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x549217: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0x7f651f8 is 12 bytes after a block of size 108 alloc'd
==20303== at 0x4C2D1AF: operator new(unsigned long) (in valgrind-3.13.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20303== by 0x4821D9: tex::generate_texture_patches(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, mve::MeshInfo const&, std::vector<tex::TextureView, std::allocator<tex::TextureView> >*, tex::Settings const&, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > >*, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D696: main (in bin/texrecon)
==20303==
==20303== Invalid read of size 4
==20303== at 0x548802: simple_laplacian(int, std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x549217: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0x7f65200 is 20 bytes after a block of size 108 alloc'd
==20303== at 0x4C2D1AF: operator new(unsigned long) (in valgrind-3.13.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20303== by 0x4821D9: tex::generate_texture_patches(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, mve::MeshInfo const&, std::vector<tex::TextureView, std::allocator<tex::TextureView> >*, tex::Settings const&, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > >*, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D696: main (in bin/texrecon)
==20303==
==20303== Invalid read of size 8
==20303== at 0x5487FF: simple_laplacian(int, std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x549286: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0x7df6c68 is 12 bytes after a block of size 108 alloc'd
==20303== at 0x4C2D1AF: operator new(unsigned long) (in valgrind-3.13.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20303== by 0x4D2E52: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303==
==20303== Invalid read of size 4
==20303== at 0x548802: simple_laplacian(int, std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x549286: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0x7df6c70 is 20 bytes after a block of size 108 alloc'd
==20303== at 0x4C2D1AF: operator new(unsigned long) (in valgrind-3.13.0/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==20303== by 0x4D2E52: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303==
==20303== Invalid read of size 4
==20303== at 0x49BF03: Eigen::SparseMatrix<float, 1, int>::sumupDuplicates() (in bin/texrecon)
==20303== by 0x49CCAA: void Eigen::internal::set_from_triplets<__gnu_cxx::__normal_iterator<Eigen::Triplet<float, int>*, std::vector<Eigen::Triplet<float, int>, std::allocator<Eigen::Triplet<float, int> > > >, Eigen::SparseMatrix<float, 0, int> >(__gnu_cxx::__normal_iterator<Eigen::Triplet<float, int>*, std::vector<Eigen::Triplet<float, int>, std::allocator<Eigen::Triplet<float, int> > > > const&, __gnu_cxx::__normal_iterator<Eigen::Triplet<float, int>*, std::vector<Eigen::Triplet<float, int>, std::allocator<Eigen::Triplet<float, int> > > > const&, Eigen::SparseMatrix<float, 0, int>&, int) (in bin/texrecon)
==20303== by 0x549417: poisson_blend(std::shared_ptr<mve::Image<float> const>, std::shared_ptr<mve::Image<unsigned char> const>, std::shared_ptr<mve::Image<float> >, float) (in bin/texrecon)
==20303== by 0x4DF5A3: TexturePatch::blend(std::shared_ptr<mve::Image<float> const>) (in bin/texrecon)
==20303== by 0x4D35AB: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) [clone ._omp_fn.0] (in bin/texrecon)
==20303== by 0x607BDAE: GOMP_parallel (in gcc-7.3.0-lib/lib/libgomp.so.1.0.0)
==20303== by 0x4D575A: tex::local_seam_leveling(UniGraph const&, std::shared_ptr<mve::TriangleMesh const>, std::vector<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> >, std::allocator<std::vector<tex::VertexProjectionInfo, std::allocator<tex::VertexProjectionInfo> > > > const&, std::vector<std::shared_ptr<TexturePatch>, std::allocator<std::shared_ptr<TexturePatch> > >*) (in bin/texrecon)
==20303== by 0x44D7C5: main (in bin/texrecon)
==20303== Address 0xf932de04 is not stack'd, malloc'd or (recently) free'd
==20303==
Received signal SIGSEGV (segmentation fault)
Obtained 12 stack frames: 0x588f44 0x67032d0 0x49bf03 0x49ccab 0x549418 0x4df5a4 0x4d35ac 0x607bdaf 0x4d575b 0x44d7c6 0x66f0020 0x4508ca
bin/texrecon(_ZN4util6system17print_stack_traceEv+0x34)[0x588f44]
glibc-2.26-131/lib/libc.so.6(+0x342d0)[0x67032d0]
bin/texrecon(_ZN5Eigen12SparseMatrixIfLi1EiE15sumupDuplicatesEv+0x3a3)[0x49bf03]
bin/texrecon(_ZN5Eigen8internal17set_from_tripletsIN9__gnu_cxx17__normal_iteratorIPNS_7TripletIfiEESt6vectorIS5_SaIS5_EEEENS_12SparseMatrixIfLi0EiEEEEvRKT_SF_RT0_i+0x7db)[0x49ccab]
bin/texrecon(_Z13poisson_blendSt10shared_ptrIKN3mve5ImageIfEEES_IKNS1_IhEEES_IS2_Ef+0x858)[0x549418]
bin/texrecon(_ZN12TexturePatch5blendESt10shared_ptrIKN3mve5ImageIfEEE+0x94)[0x4df5a4]
bin/texrecon[0x4d35ac]
gcc-7.3.0-lib/lib/libgomp.so.1(GOMP_parallel+0x3f)[0x607bdaf]
bin/texrecon(_ZN3tex19local_seam_levelingERK8UniGraphSt10shared_ptrIKN3mve12TriangleMeshEERKSt6vectorIS8_INS_20VertexProjectionInfoESaIS9_EESaISB_EEPS8_IS3_I12TexturePatchESaISH_EE+0x148b)[0x4d575b]
bin/texrecon(main+0xc36)[0x44d7c6]
glibc-2.26-131/lib/libc.so.6(__libc_start_main+0xf0)[0x66f0020]
bin/texrecon(_start+0x2a)[0x4508ca]
Segmentation fault
==20303==
==20303== HEAP SUMMARY:
==20303== in use at exit: 105,409,680 bytes in 154,282 blocks
==20303== total heap usage: 4,718,202 allocs, 4,563,920 frees, 10,446,037,939 bytes allocated
==20303==
==20303== LEAK SUMMARY:
==20303== definitely lost: 3,570,646 bytes in 61,064 blocks
==20303== indirectly lost: 1,560,816 bytes in 60,949 blocks
==20303== possibly lost: 3,648 bytes in 26 blocks
==20303== still reachable: 100,274,570 bytes in 32,243 blocks
==20303== of which reachable via heuristic:
==20303== newarray : 6,168 bytes in 3 blocks
==20303== suppressed: 0 bytes in 0 blocks
==20303== Rerun with --leak-check=full to see details of leaked memory
==20303==
==20303== For counts of detected and suppressed errors, rerun with: -v
==20303== ERROR SUMMARY: 6 errors from 6 contexts (suppressed: 0 from 0)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels