Page MenuHome

Segmentation fault crash with boolean difference modifier and three objects
Open, NormalPublic

Description

has three mesh objects. Two (Cylinder and Cylinder.001) have two boolean difference modifiers each, and one of those two (Cylinder.001) also has an array modifier. When Boolean.002 on Cylinder is activated, Blender crashes every time for me. I have not tested this extensively, but it appears that any four of the modifiers can be activated at once without crashing and that the crash only occurs when all five are activated at once.

Machines I've reproduced this with:

Blender 2.73 on Arch Linux x64 with NVIDIA GTX 770
Blender 2.73 on Arch Linux x64 with Intel HD Graphics 3000
Blender 2.72 on Debian Jesse x64 with Intel HD Graphics 3000

Details

Type
To Do

Event Timeline

catlover2 (catlover2) updated the task description. (Show Details)
catlover2 (catlover2) raised the priority of this task from to Needs Triage by Developer.
catlover2 (catlover2) set Type to Bug.

Seems to be an issue with dissolving edges after boolean operation failure. Will look into it.

Sergey Sharybin (sergey) triaged this task as Normal priority.Feb 25 2015, 10:04 AM

Related, a crash in the following deprecated scene, when toggling from Edit mode to Object mode, seems to cause a crash with Boolean modifier (depending on selection or not).

Here the crash stacktrace that leads to the Boolean carving.
The error should be producable as follows:

Blender 2.73 (with pie menues enabled):

  • Open scene boolean_crash_revision_<revision>.blend. Current mode is Edit mode.
  • (Deselecting everything at this point does (at least for me) prevent the segmentation fault.)
  • Make sure something is selected.
  • Toggle mode to Object mode.
  • crash.

Blender (today's HEAD) revision 0aa258117d52cf09530e1ff30837f697f3bb8307 / without Pie menues:

  • Similar. The difference is that strangely it's possible to toggle between object and edit mode several times before the crash occurs.

Stacktrace:

(gdb) file ~/build_linux/bin/blender
(gdb) run
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffefe49700 (LWP 2089)]
[New Thread 0x7fffef648700 (LWP 2090)]
[New Thread 0x7fffed17c700 (LWP 2091)]
[Thread 0x7fffed17c700 (LWP 2091) exited]
[New Thread 0x7fffed17c700 (LWP 2092)]
[New Thread 0x7fffe897a700 (LWP 2093)]
[New Thread 0x7fffe3fff700 (LWP 2094)]
[Thread 0x7fffe3fff700 (LWP 2094) exited]
[New Thread 0x7fffe0aa7700 (LWP 2096)]

Program received signal SIGSEGV, Segmentation fault.
0x0000000001b334e3 in carve::mesh::detail::FaceStitcher::resolveOpenEdges() ()
(gdb) where
#0  0x0000000001b334e3 in carve::mesh::detail::FaceStitcher::resolveOpenEdges() ()
#1  0x0000000001b38935 in carve::mesh::detail::FaceStitcher::construct() ()
#2  0x0000000001b2ee23 in void carve::mesh::MeshSet<3u>::_init_from_faces<__gnu_cxx::__normal_iterator<carve::mesh::Face<3u>**, std::ve
#3  0x0000000001b6ee4f in carve::csg::(anonymous namespace)::BaseCollector::done(carve::csg::CSG::Hooks&) ()
#4  0x0000000001b0d904 in carve::csg::CSG::compute(carve::mesh::MeshSet<3u>*, carve::mesh::MeshSet<3u>*, carve::csg::CSG::Collector&, s
#5  0x0000000001b0de69 in carve::csg::CSG::compute(carve::mesh::MeshSet<3u>*, carve::mesh::MeshSet<3u>*, carve::csg::CSG::OP, std::unor
 #6  0x0000000001ae0415 in carve_performBooleanOperation ()
 #7  0x0000000000e2a557 in NewBooleanDerivedMesh ()
 #8  0x0000000000e0caf9 in applyModifier ()
 #9  0x0000000000ee134a in mesh_calc_modifiers ()
 #10 0x0000000000ee1ebc in mesh_build_data ()
 #11 0x0000000000fbce43 in BKE_object_handle_update_ex ()
 #12 0x0000000000ff70c8 in scene_update_object_func ()
 #13 0x000000000123e153 in BLI_task_pool_work_and_wait ()
 #14 0x0000000000ff7280 in scene_update_objects ()
 #15 0x0000000000ff82b8 in scene_update_tagged_recursive ()
 #16 0x0000000000ff84ff in BKE_scene_update_tagged ()
 #17 0x0000000000948942 in wm_event_do_notifiers ()
 #18 0x0000000000943170 in WM_main ()
#19 0x0000000000931385 in main ()

Unfortunately, the backtrace is not really helpful because it indicates where the issue was reveal, not when it actually happened. Actual issue happens somewhere prior to that point and it's causing corrupted geometry.

Spent quite some time now trying to nail the root of the issue down, but we've got experiment branchwhere we're using Blender's BMesh for boolean operations which seems rather promising from the performance point of view, and it'll also easier for us to follow/maintain. Would prefer concentrating finishing that project. Would take some time tho.

This is also not really a new issue, it existed to some extent in all previous versions -- it didn't crash, but failed to apply modifier all together.

Sergey Sharybin (sergey) changed Type from Bug to To Do.Mar 9 2015, 12:59 PM