From edea0320e6d83959d50a1599c6d473f2a2fec87e Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 19 Jan 2016 15:44:22 -0800 Subject: [PATCH] try again to make this thread safe --- .../src/RenderableModelEntityItem.cpp | 5 ----- .../entities/src/EntityScriptingInterface.cpp | 18 ++++++++---------- libraries/entities/src/EntityTree.cpp | 19 ++++++++++++++++++- libraries/entities/src/EntityTree.h | 4 ++++ 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index 0d99376a7b..72dc79b882 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -774,11 +774,6 @@ int RenderableModelEntityItem::getJointIndex(const QString& name) const { QStringList RenderableModelEntityItem::getJointNames() const { QStringList result; - if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(const_cast(this), "getJointNames", Qt::BlockingQueuedConnection, - Q_RETURN_ARG(QStringList, result)); - return result; - } if (_model && _model->isActive()) { RigPointer rig = _model->getRig(); int jointCount = rig->getJointStateCount(); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index c90712ac42..3f7bc83386 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -977,20 +977,18 @@ int EntityScriptingInterface::getJointIndex(const QUuid& entityID, const QString if (!_entityTree) { return -1; } - EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); - if (!entity) { - return -1; - } - return entity->getJointIndex(name); + int result; + QMetaObject::invokeMethod(_entityTree.get(), "getJointIndex", Qt::BlockingQueuedConnection, + Q_ARG(QUuid, entityID), Q_ARG(QString, name), Q_RETURN_ARG(int, result)); + return result; } QStringList EntityScriptingInterface::getJointNames(const QUuid& entityID) { if (!_entityTree) { return QStringList(); } - EntityItemPointer entity = _entityTree->findEntityByEntityItemID(entityID); - if (!entity) { - return QStringList(); - } - return entity->getJointNames(); + QStringList result; + QMetaObject::invokeMethod(_entityTree.get(), "getJointNames", Qt::BlockingQueuedConnection, + Q_ARG(QUuid, entityID), Q_RETURN_ARG(QStringList, result)); + return result; } diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index eb23034506..f7a4a9d913 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -1358,7 +1358,6 @@ void EntityTree::trackIncomingEntityLastEdited(quint64 lastEditedTime, int bytes } } - void EntityTree::callLoader(EntityItemID entityID) { // this is used to bounce from the networking thread to the main thread EntityItemPointer entity = findEntityByEntityItemID(entityID); @@ -1366,3 +1365,21 @@ void EntityTree::callLoader(EntityItemID entityID) { entity->loader(); } } + +int EntityTree::getJointIndex(const QUuid& entityID, const QString& name) const { + EntityTree* nonConstThis = const_cast(this); + EntityItemPointer entity = nonConstThis->findEntityByEntityItemID(entityID); + if (!entity) { + return -1; + } + return entity->getJointIndex(name); +} + +QStringList EntityTree::getJointNames(const QUuid& entityID) const { + EntityTree* nonConstThis = const_cast(this); + EntityItemPointer entity = nonConstThis->findEntityByEntityItemID(entityID); + if (!entity) { + return QStringList(); + } + return entity->getJointNames(); +} diff --git a/libraries/entities/src/EntityTree.h b/libraries/entities/src/EntityTree.h index 0f77c4af9a..cf62baf808 100644 --- a/libraries/entities/src/EntityTree.h +++ b/libraries/entities/src/EntityTree.h @@ -236,6 +236,10 @@ public: return _deletedEntityItemIDs.contains(id); } + // these are used to call through to EntityItems + int getJointIndex(const QUuid& entityID, const QString& name) const; + QStringList getJointNames(const QUuid& entityID) const; + public slots: void callLoader(EntityItemID entityID);