View Issue Details

IDProjectCategoryView StatusLast Update
0000889FreeCADBugpublic2013-06-12 19:20
Reporterjrheinlaender Assigned Towmayer  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Target Version0.14Fixed in Version0.14 
Summary0000889: Crash on filleting
DescriptionOn the attached part, changing the radius of the fillet to any value > 3 leads to a segfault
TagsNo tags attached.
FreeCAD Information

Activities

2012-11-26 12:57

 

filletcrash.fcstd (Attachment missing)

wmayer

2012-11-26 21:34

administrator   ~0002585

Here is the stack trace:
Program received signal SIGSEGV, Segmentation fault.
0xb2ec5489 in TopoDS_ListIteratorOfListOfShape::Initialize(TopoDS_ListOfShape const&) () from /usr/lib/libTKBRep-6.3.0.so
(gdb) bt
#0 0xb2ec5489 in TopoDS_ListIteratorOfListOfShape::Initialize(TopoDS_ListOfShape const&) () from /usr/lib/libTKBRep-6.3.0.so
#1 0xb2f0d172 in TopoDS_Iterator::Initialize(TopoDS_Shape const&, unsigned int, unsigned int) () from /usr/lib/libTKBRep-6.3.0.so
0000002 0xb2f0d2a8 in TopoDS_Iterator::TopoDS_Iterator(TopoDS_Shape const&, unsigned int, unsigned int) () from /usr/lib/libTKBRep-6.3.0.so
0000003 0xb2f047e5 in TopExp::FirstVertex(TopoDS_Edge const&, unsigned int) () from /usr/lib/libTKBRep-6.3.0.so
0000004 0xb42be3ea in ChFi3d_Builder::PerformIntersectionAtEnd(int) () from /usr/lib/libTKFillet-6.3.0.so
0000005 0xb426c264 in ChFi3d_Builder::PerformFilletOnVertex(int) () from /usr/lib/libTKFillet-6.3.0.so
0000006 0xb426c9aa in ChFi3d_Builder::Compute() () from /usr/lib/libTKFillet-6.3.0.so
0000007 0xb4259dc2 in BRepFilletAPI_MakeFillet::Build() () from /usr/lib/libTKFillet-6.3.0.so
0000008 0xafd04879 in PartDesign::Fillet::execute() () from /home/werner/Projects/freecad-git/_build/Mod/PartDesign/PartDesign.so
0000009 0x00c9861e in App::DocumentObject::recompute() () from /home/werner/Projects/freecad-git/_build/lib/libFreeCADApp.so
0000010 0xb44a87dd in Part::Feature::recompute() () from /home/werner/Projects/freecad-git/_build/Mod/Part/Part.so
0000011 0x00c7124d in App::Document::_recomputeFeature(App::DocumentObject*) () from /home/werner/Projects/freecad-git/_build/lib/libFreeCADApp.so
0000012 0x00c71787 in App::Document::recomputeFeature(App::DocumentObject*) () from /home/werner/Projects/freecad-git/_build/lib/libFreeCADApp.so
0000013 0xafd9383f in PartDesignGui::TaskFilletParameters::onLengthChanged(double) () from /home/werner/Projects/freecad-git/_build/Mod/PartDesign/PartDesignGui.so
0000014 0xafd93fa8 in PartDesignGui::TaskFilletParameters::qt_metacall(QMetaObject::Call, int, void**) () from /home/werner/Projects/freecad-git/_build/Mod/PartDesign/PartDesignGui.so
0000015 0x0410bd8a in QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) () from /usr/lib/libQtCore.so.4
0000016 0x0411a445 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/libQtCore.so.4
0000017 0x039f707f in QDoubleSpinBox::valueChanged(double) () from /usr/lib/libQtGui.so.4
0000018 0x03787c5d in ?? () from /usr/lib/libQtGui.so.4
0000019 0x036d90d4 in ?? () from /usr/lib/libQtGui.so.4
0000020 0x036dc5cd in QAbstractSpinBox::stepBy(int) () from /usr/lib/libQtGui.so.4
0000021 0x036d7916 in QAbstractSpinBox::wheelEvent(QWheelEvent*) () from /usr/lib/libQtGui.so.4
0000022 0x03326d6b in QWidget::event(QEvent*) () from /usr/lib/libQtGui.so.4
0000023 0x036da91c in QAbstractSpinBox::event(QEvent*) () from /usr/lib/libQtGui.so.4
0000024 0x032c84dc in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
0000025 0x032cf6d4 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQtGui.so.4
0000026 0x0043a560 in Gui::GUIApplication::notify(QObject*, QEvent*) () from /home/werner/Projects/freecad-git/_build/lib/libFreeCADGui.so
0000027 0x04106b2b in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/libQtCore.so.4
0000028 0x0334acb3 in ?? () from /usr/lib/libQtGui.so.4
0000029 0x0335a82c in ?? () from /usr/lib/libQtGui.so.4
0000030 0x03359601 in QApplication::x11ProcessEvent(_XEvent*) () from /usr/lib/libQtGui.so.4
0000031 0x033886fa in ?? () from /usr/lib/libQtGui.so.4
0000032 0x042726e5 in g_main_dispatch (context=0x80fa8b0) at /build/buildd/glib2.0-2.24.1/glib/gmain.c:1966
0000033 IA__g_main_context_dispatch (context=0x80fa8b0) at /build/buildd/glib2.0-2.24.1/glib/gmain.c:2519
0000034 0x042763d8 in g_main_context_iterate (context=0x80fa8b0, block=<value optimized out>, dispatch=1, self=0x80fa830) at /build/buildd/glib2.0-2.24.1/glib/gmain.c:2597
0000035 0x042765b8 in IA__g_main_context_iteration (context=0x80fa8b0, may_block=1) at /build/buildd/glib2.0-2.24.1/glib/gmain.c:2660
0000036 0x04132715 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
0000037 0x03388225 in ?? () from /usr/lib/libQtGui.so.4
0000038 0x04105149 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#39 0x0410559a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQtCore.so.4
#40 0x0410978f in QCoreApplication::exec() () from /usr/lib/libQtCore.so.4
0000041 0x032c8577 in QApplication::exec() () from /usr/lib/libQtGui.so.4
0000042 0x00436a6e in Gui::Application::runApplication() () from /home/werner/Projects/freecad-git/_build/lib/libFreeCADGui.so
0000043 0x0805038a in main ()
0000044 0x04620bd6 in __libc_start_main (main=0x804e722 <main>, argc=1, ubp_av=0xbffff414, init=0x8053b90 <__libc_csu_init>, fini=0x8053b80 <__libc_csu_fini>, rtld_fini=0x11e080 <_dl_fini>, stack_end=0xbffff40c) at libc-start.c:226
0000045 0x0804e611 in _start ()

wmayer

2012-11-27 10:25

administrator   ~0002587

Last edited: 2012-11-27 11:22

Maybe we should check this suggestion:
http://www.opencascade.org/org/forum/thread_12565/?forum=3
http://tracker.dev.opencascade.org/view.php?id=22800
http://tracker.dev.opencascade.org/view.php?id=6143

wmayer

2012-11-27 19:35

administrator   ~0002588

Last edited: 2012-11-28 08:34

Using OSD::SetSignal() works very well and catches all segmentation faults and converts it into a Standard_Failure exception.

According to the examples above the function OSD::SetSignal() needs to be set only once. I first tried it inside initPart() but this leads to a crash of the application under Windows -- seems some conflicts with python. On Ubuntu 10.04 everything works fine.

Moving it into Part::Feature::recompute() as
static bool first = true;
if (first) {
    first = false;
    OSD::SetSignal();
}

works on both systems.

EDIT: On Windows the OSD stuff seems to work only with VC++ compiler but not MinGW. With the latter we still have crashes.
Note: When applying the refinement algorithm on the pad then the filleting works with all radii.

wmayer

2012-11-28 09:05

administrator   ~0002589

This bug should be fixed in 0.14 as at the moment it's not clear if it causes some regression to the imminent 0.13.

wmayer

2013-06-12 19:17

administrator   ~0003200

git show b36ffe6

Issue History

Date Modified Username Field Change
2012-11-26 12:57 jrheinlaender New Issue
2012-11-26 12:57 jrheinlaender File Added: filletcrash.fcstd
2012-11-26 21:34 wmayer Note Added: 0002585
2012-11-27 10:25 wmayer Note Added: 0002587
2012-11-27 11:22 wmayer Note Edited: 0002587
2012-11-27 19:35 wmayer Note Added: 0002588
2012-11-28 08:34 wmayer Note Edited: 0002588
2012-11-28 09:05 wmayer Note Added: 0002589
2012-11-28 09:05 wmayer Target Version => 0.14
2012-11-28 09:05 wmayer Status new => assigned
2012-11-28 09:05 wmayer Assigned To => wmayer
2013-06-12 19:17 wmayer Note Added: 0003200
2013-06-12 19:20 wmayer Status assigned => closed
2013-06-12 19:20 wmayer Resolution open => fixed
2013-06-12 19:20 wmayer Fixed in Version => 0.14