Bug? Clicking on an edit tracker causes a segfault / unhandled exception

Need help, or want to share a macro? Post here!
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
Post Reply
User avatar
Joel_graff
Veteran
Posts: 1949
Joined: Fri Apr 28, 2017 4:23 pm
Contact:

Bug? Clicking on an edit tracker causes a segfault / unhandled exception

Post by Joel_graff »

I'm working on a command that uses DraftTrackers.editTracker.

Below is example code that demonstrates my issue. I create an editTracker and make it visible (it's located at the origin). I left click on it and FreeCAD segfaults. I'm sure I'm missing something obvious, but it's new territory for me. :)

Anyway, here's the sample code:

Code: Select all


import FreeCAD as App
import FreeCADGui as Gui

from DraftTrackers import editTracker

class Command():
    """
    Command Description
    """
    def __init__(self):

        self.tracker = None

    def GetResources(self):

        return {'Pixmap'  : '',
                'Accel'   : '',
                'MenuText': '',
                'ToolTip' : '',
                'CmdType' : 'ForEdit'}

    def Activated(self):
        """
        Command activation method
        """

        self.tracker = editTracker(pos=App.Vector(), name='test')
        return

Gui.addCommand('Command', Command())

Here's the terminal dump:

Code: Select all

Program received signal SIGSEGV, Segmentation fault.
#0  /lib/x86_64-linux-gnu/libc.so.6(+0x3ef20) [0x7f3752245f20]
#1  0x7f37547beb50 in App::PropertyString::getValue() const from /home/joel/Projects/freecad-build/lib/libFreeCADApp.so+0
#2  0x7f3754fe9d12 in Gui::DockWnd::SelectionView::OnChange(Base::Subject<Gui::SelectionChanges const&>&, Gui::SelectionChanges const&) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x2e2
#3  0x7f3755208e70 in Base::Subject<Gui::SelectionChanges const&>::Notify(Gui::SelectionChanges const&) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x40
#4  0x7f3755206784 in Gui::SelectionSingleton::addSelection(char const*, char const*, char const*, float, float, float) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x274
#5  0x7f375506d05d in Gui::SoFCSelection::handleEvent(SoHandleEventAction*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x92d
#6  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#7  0x7f3751bf3008 in SoChildList::traverse(SoAction*, int, int) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0xd8
#8  0x7f3751c424e6 in SoGroup::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x56
#9  0x7f3751c5c967 in SoSeparator::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x27
#10  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#11  0x7f3751bf3008 in SoChildList::traverse(SoAction*, int, int) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0xd8
#12  0x7f3751c424e6 in SoGroup::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x56
#13  0x7f3751c5c967 in SoSeparator::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x27
#14  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#15  0x7f3751bf3008 in SoChildList::traverse(SoAction*, int, int) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0xd8
#16  0x7f3751c603ef in SoSwitch::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x24f
#17  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#18  0x7f3751bf3008 in SoChildList::traverse(SoAction*, int, int) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0xd8
#19  0x7f3751c424e6 in SoGroup::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x56
#20  0x7f3751c5c967 in SoSeparator::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x27
#21  0x7f375506fb8c in Gui::SoFCUnifiedSelection::handleEvent(SoHandleEventAction*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x9c
#22  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#23  0x7f3751bf3008 in SoChildList::traverse(SoAction*, int, int) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0xd8
#24  0x7f3751c424e6 in SoGroup::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x56
#25  0x7f3751c5c967 in SoSeparator::doAction(SoAction*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x27
#26  0x7f3751a53504 in SoAction::traverse(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x64
#27  0x7f3751a5ce48 in SoHandleEventAction::beginTraversal(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x68
#28  0x7f3751a53a82 in SoAction::apply(SoNode*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x372
#29  0x7f3751c0f8a0 in SoEventManager::actuallyProcessEvent(SoEvent const*) from /usr/lib/x86_64-linux-gnu/libCoin.so.80c+0x60
#30  0x7f37550e2e3e in SIM::Coin3D::Quarter::QuarterWidget::processSoEvent(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x1e
#31  0x7f37550ebb06 in SIM::Coin3D::Quarter::SoQTQuarterAdaptor::processSoEvent(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x56
#32  0x7f37551156b9 in Gui::View3DInventorViewer::processSoEventBase(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x9
#33  0x7f37550fa569 in Gui::BlenderNavigationStyle::processSoEvent(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x219
#34  0x7f37550f5998 in Gui::NavigationStyle::processEvent(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0xf8
#35  0x7f3755115633 in Gui::View3DInventorViewer::processSoEvent(SoEvent const*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x63
#36  0x7f37550da275 in SIM::Coin3D::Quarter::EventFilter::eventFilter(QObject*, QEvent*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x185
#37  0x7f3752e236cc in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x7c
#38  0x7f3753438815 in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x75
#39  0x7f375344065f in QApplication::notify(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x7ff
#40  0x7f3754ebad58 in Gui::GUIApplication::notify(QObject*, QEvent*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x88
#41  0x7f3752e239e8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x118
#42  0x7f375343f632 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1d2
#43  /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(+0x1ae16b) [0x7f375349216b]
#44  /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5(+0x1b07da) [0x7f37534947da]
#45  0x7f375343883c in QApplicationPrivate::notify_helper(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x9c
#46  0x7f3753440104 in QApplication::notify(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x2a4
#47  0x7f3754ebad58 in Gui::GUIApplication::notify(QObject*, QEvent*) from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x88
#48  0x7f3752e239e8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x118
#49  0x7f374ed4e583 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0x6f3
#50  0x7f374ed50055 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0x135
#51  0x7f374ed272eb in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5+0xab
#52  /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5(+0x9d1c0) [0x7f3742bc21c0]
#53  /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x2e7) [0x7f374d0a5387]
#54  /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0(+0x4c5c0) [0x7f374d0a55c0]
#55  /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x2c) [0x7f374d0a564c]
#56  0x7f3752e7c99f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x5f
#57  0x7f3752e21a1a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x13a
#58  0x7f3752e2aac4 in QCoreApplication::exec() from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5+0x94
#59  0x7f3754e40217 in Gui::Application::runApplication() from /home/joel/Projects/freecad-build/lib/libFreeCADGui.so+0x1437
#60  ./FreeCAD(main+0x695) [0x559b2b4b84c5]
#61  /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7) [0x7f3752228b97]
#62  ./FreeCAD(_start+0x2a) [0x559b2b4b918a]
and my system info:

Code: Select all

OS: Linux Mint 19.1
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16079 (Git)
Build type: Release
Branch: master
Hash: 6363c90a20b296ab69d7b52230009928199d90df
Python version: 3.6.7
Qt version: 5.9.5
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: English/UnitedStates (en_US)
Last edited by Joel_graff on Mon Apr 22, 2019 1:42 pm, edited 1 time in total.
FreeCAD Trails workbench for transportation engineering: https://www.github.com/joelgraff/freecad.trails

pivy_trackers 2D coin3D library: https://www.github.com/joelgraff/pivy_trackers
User avatar
Joel_graff
Veteran
Posts: 1949
Joined: Fri Apr 28, 2017 4:23 pm
Contact:

Re: Clicking on an edit tracker causes a segfault.

Post by Joel_graff »

I've tested it on my Win7 machine. It doesn't segfault, but instead, gives me this:

Code: Select all

Unhandled Base::Exception caught when notifying observer.
The error message is: Access violation
Unhandled Base::Exception caught in GUIApplication::notify.
The error message is: Access violation
Unhandled Base::Exception caught in GUIApplication::notify.
The error message is: Access violation
Unhandled Base::Exception caught in GUIApplication::notify.
The error message is: Access violation
Unhandled Base::Exception caught in GUIApplication::notify.
The error message is: Access violation
The exception error regarding 'GUIApplication::notify' recurs indefinitely, spamming the Report view 3 or 4 times a second...

Even if I am doing something wrong, it seems the bug here, is in the exception handling between Linux and Windows...

System info:

Code: Select all

OS: Windows 7
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.16474 (Git)
Build type: Release
Branch: master
Hash: 746997e48411f22a150b95b6fdbb9b02cbe741d5
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0
Locale: English/UnitedStates (en_US)
FreeCAD Trails workbench for transportation engineering: https://www.github.com/joelgraff/freecad.trails

pivy_trackers 2D coin3D library: https://www.github.com/joelgraff/pivy_trackers
User avatar
yorik
Founder
Posts: 13660
Joined: Tue Feb 17, 2009 9:16 pm
Location: Brussels
Contact:

Re: Bug? Clicking on an edit tracker causes a segfault / unhandled exception

Post by yorik »

Fixed in git commit 79f3e1c57

The reason of the crash was that the editTracker created by default a selection node with an inexisting object name, which made something else in FreeCAD crash. Now it will print a warning message, but not crash anymore
Post Reply