From 59d400d58b082d583959eb8c27c3155eaa301888 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sun, 8 Jan 2012 13:31:49 +0100 Subject: [PATCH] Temporarily disable Nasal callbacks in lazily loaded scenery models to avoid segfaults due to multi-threading issues. Will need to be replaced by proper fix, if this proves Nasal related segfaults to be fixed. --- src/Scenery/tilemgr.cxx | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Scenery/tilemgr.cxx b/src/Scenery/tilemgr.cxx index 666d64b9c..3bc9258ab 100644 --- a/src/Scenery/tilemgr.cxx +++ b/src/Scenery/tilemgr.cxx @@ -247,9 +247,20 @@ FGTileMgr::loadTileModel(const string& modelPath, bool cacheModel) SGModelLib::loadModel(fullPath.str(), globals->get_props(), new FGNasalModelData); else + { + /* TODO FGNasalModelData's callback "modelLoaded" isn't thread-safe. + * But deferred (or paged) OSG loading runs in a separate thread, which would + * trigger the FGNasalModelData::modelLoaded callback. We're easily doomed + * when this happens and the model actually contains a Nasal "load" hook - which + * would run the Nasal parser and Nasal script execution in a separate thread... + * => Disabling the callback for now, to test if all Nasal related segfaults are + * gone. Proper resolution is TBD. We'll need to somehow decouple the OSG callback, + * so we can run the Nasal stuff in the main thread. + */ result= - SGModelLib::loadDeferredModel(fullPath.str(), globals->get_props(), - new FGNasalModelData); + SGModelLib::loadDeferredModel(fullPath.str(), globals->get_props()/*, + new FGNasalModelData*/); + } } catch (const sg_io_exception& exc) { string m(exc.getMessage()); m += " ";