Well, the “good” news is that I can reproduce this (on two different machines now). The crash is occurring inside FontConfig when it tries to list out the available substitute fonts for something using “sans” at 50px (or maybe 50pt, I’m not sure). Does that particular font and size sound familiar to any other devs? Does it come from a recent change? (e.g. the last couple of months)(ETA: Nevermind, I reread the thread and found the replacement file). I should note that it’s not actually related to the font, if I change the code to use a different one it still crashes, because apparently you always have to search for the font subs even if the font exists. The crash feels a bit intermittent because the call is ultimately driven by a timer in Coin, so it’s not necessarily related to a specific user interaction.
It’s always possible that the real cause of the crash is memory corruption due to something else entirely, but I will have to switch on guard_malloc (or whatever Visual Studio calls its equivalent) to figure that out for sure. It’s easier to start by investigating the current call stack, IMO.
Here’s my backtrace:
ntdll.dll!RtlEnterCriticalSection() Unknown
KernelBase.dll!FindNextFileW() Unknown
ucrtbase.dll!common_find_next_wide<_wfinddata64i32_t>() Unknown
ucrtbase.dll!_findnext64i32() Unknown
fontconfig.dll!0000000180014e7f() Unknown
fontconfig.dll!000000018002014c() Unknown
fontconfig.dll!000000018001fe9c() Unknown
fontconfig.dll!000000018001fdaf() Unknown
fontconfig.dll!0000000180017edc() Unknown
fontconfig.dll!00000001800185f3() Unknown
fontconfig.dll!000000018002569d() Unknown
fontconfig.dll!0000000180018ef5() Unknown
fontconfig.dll!000000018001a821() Unknown
Coin4d.dll!cc_fcglue_FcConfigSubstitute(void * config, _FcPattern * pattern, _FcMatchKind kind) Line 266 C++
Coin4d.dll!find_font_file(const char * fontname, unsigned int pixelsize) Line 525 C++
Coin4d.dll!cc_flwft_get_font(const char * fontname, unsigned int pixelsize) Line 639 C++
> Coin4d.dll!cc_flw_get_font_id(const char * fontname, unsigned int sizey, float angle, float complexity) Line 561 C++
Coin4d.dll!cc_glyph3d_ref(unsigned int character, const cc_font_specification * spec) Line 200 C++
Coin4d.dll!SoAsciiTextP::setUpGlyphs(SoState * state, SoAsciiText * textnode) Line 888 C++
Coin4d.dll!SoAsciiText::computeBBox(SoAction * action, SbBox3f & box, SbVec3f & center) Line 624 C++
Coin4d.dll!SoShape::getBBox(SoAction * action, SbBox3f & box, SbVec3f & center) Line 1493 C++
Coin4d.dll!SoShape::getBoundingBox(SoGetBoundingBoxAction * action) Line 392 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoSwitch::doAction(SoAction * action) Line 322 C++
Coin4d.dll!SoSwitch::getBoundingBox(SoGetBoundingBoxAction * action) Line 226 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int first, const int last) Line 381 C++
Coin4d.dll!SoChildList::traverse(SoAction * const action, const int index) Line 462 C++
Coin4d.dll!SoGroup::getBoundingBox(SoGetBoundingBoxAction * action) Line 582 C++
Coin4d.dll!SoSeparator::getBoundingBox(SoGetBoundingBoxAction * action) Line 576 C++
Coin4d.dll!SoNode::getBoundingBoxS(SoAction * action, SoNode * node) Line 893 C++
Coin4d.dll!SoAction::traverse(SoNode * const node) Line 951 C++
Coin4d.dll!SoAction::beginTraversal(SoNode * node) Line 1273 C++
Coin4d.dll!SoGetBoundingBoxAction::beginTraversal(SoNode * node) Line 603 C++
Coin4d.dll!SoAction::apply(SoNode * root) Line 566 C++
Coin4d.dll!SoRenderManagerP::setClippingPlanes() Line 120 C++
Coin4d.dll!SoRenderManagerP::updateClippingPlanesCB(void * closure, SoSensor * sensor) Line 102 C++
Coin4d.dll!SoSensor::trigger() Line 199 C++
Coin4d.dll!SoDelayQueueSensor::trigger() Line 163 C++
Coin4d.dll!SoDataSensor::trigger() Line 289 C++
Coin4d.dll!SoSensorManager::processDelayQueue(int isidle) Line 609 C++
Coin4d.dll!timeoutsensor_cb(void * userdata, SoSensor * __formal) Line 247 C++
Coin4d.dll!SoSensor::trigger() Line 199 C++
Coin4d.dll!SoTimerQueueSensor::trigger() Line 177 C++
Coin4d.dll!SoSensorManager::processTimerQueue() Line 493 C++
FreeCADGui_d.dll!SIM::Coin3D::Quarter::SensorManager::idleTimeout() Line 150 C++
FreeCADGui_d.dll!SIM::Coin3D::Quarter::SensorManager::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 88 C++
[External Code]
FreeCADGui_d.dll!Gui::GUIApplication::notify(QObject * receiver, QEvent * event) Line 92 C++
[External Code]
FreeCADGui_d.dll!Gui::GUIApplication::notify(QObject * receiver, QEvent * event) Line 92 C++
[External Code]
FreeCADGui_d.dll!Gui::Application::runApplication() Line 2287 C++
FreeCAD_d.exe!main(int argc, char * * argv) Line 302 C++
FreeCAD_d.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 97 C++
[External Code]