From 857a4ab739bb335a420f9d87779b9a5e57dba87a Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Wed, 3 Apr 2019 13:04:55 -0700 Subject: [PATCH 1/3] enabled MyAvatar.get and .set rotation --- libraries/avatars/src/AvatarData.cpp | 5 ++--- libraries/avatars/src/AvatarData.h | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index a2b0b808ba..08f65b6d6a 100755 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -1721,7 +1721,6 @@ glm::vec3 AvatarData::getJointTranslation(const QString& name) const { // on another thread in between the call to getJointIndex and getJointTranslation // return getJointTranslation(getJointIndex(name)); return readLockWithNamedJointIndex(name, [this](int index) { - return _jointData.at(index).translation; return getJointTranslation(index); }); } @@ -1809,8 +1808,8 @@ glm::quat AvatarData::getJointRotation(const QString& name) const { // Can't do this, not thread safe // return getJointRotation(getJointIndex(name)); - return readLockWithNamedJointIndex(name, [&](int index) { - return _jointData.at(index).rotation; + return readLockWithNamedJointIndex(name, [this](int index) { + return getJointRotation(index); }); } diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index caa1f9f892..2eb5e28eea 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1750,14 +1750,14 @@ protected: template T readLockWithNamedJointIndex(const QString& name, const T& defaultValue, F f) const { - int index = getFauxJointIndex(name); - QReadLocker readLock(&_jointDataLock); - - // The first conditional is superfluous, but illustrative - if (index == -1 || index < _jointData.size()) { + int index = getJointIndex(name); + if (index == -1) { + index = getFauxJointIndex(name); + } + if (index == -1) { return defaultValue; } - + QReadLocker readLock(&_jointDataLock); return f(index); } @@ -1768,11 +1768,14 @@ protected: template void writeLockWithNamedJointIndex(const QString& name, F f) { - int index = getFauxJointIndex(name); - QWriteLocker writeLock(&_jointDataLock); + int index = getJointIndex(name); + if (index == -1) { + index = getFauxJointIndex(name); + } if (index == -1) { return; } + QWriteLocker writeLock(&_jointDataLock); if (_jointData.size() <= index) { _jointData.resize(index + 1); } From 72264203dbca1fba700a3a0d0a46fb4e15aa48a0 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Thu, 4 Apr 2019 10:08:50 -0700 Subject: [PATCH 2/3] corrected the lock positions to cover the getJointIndex calls --- libraries/avatars/src/AvatarData.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 2eb5e28eea..6dbb8dc7c8 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1750,6 +1750,7 @@ protected: template T readLockWithNamedJointIndex(const QString& name, const T& defaultValue, F f) const { + QReadLocker readLock(&_jointDataLock); int index = getJointIndex(name); if (index == -1) { index = getFauxJointIndex(name); @@ -1757,7 +1758,6 @@ protected: if (index == -1) { return defaultValue; } - QReadLocker readLock(&_jointDataLock); return f(index); } @@ -1768,6 +1768,7 @@ protected: template void writeLockWithNamedJointIndex(const QString& name, F f) { + QWriteLocker writeLock(&_jointDataLock); int index = getJointIndex(name); if (index == -1) { index = getFauxJointIndex(name); @@ -1775,7 +1776,6 @@ protected: if (index == -1) { return; } - QWriteLocker writeLock(&_jointDataLock); if (_jointData.size() <= index) { _jointData.resize(index + 1); } From 9afbf76ec19ab6c6d818726660995a52eed0be07 Mon Sep 17 00:00:00 2001 From: Angus Antley Date: Thu, 4 Apr 2019 10:22:24 -0700 Subject: [PATCH 3/3] removed unnecessary getFauxJointIndex call, this is handled in getJointIndex --- libraries/avatars/src/AvatarData.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 6dbb8dc7c8..7604a93ac4 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1752,9 +1752,6 @@ protected: T readLockWithNamedJointIndex(const QString& name, const T& defaultValue, F f) const { QReadLocker readLock(&_jointDataLock); int index = getJointIndex(name); - if (index == -1) { - index = getFauxJointIndex(name); - } if (index == -1) { return defaultValue; } @@ -1770,9 +1767,6 @@ protected: void writeLockWithNamedJointIndex(const QString& name, F f) { QWriteLocker writeLock(&_jointDataLock); int index = getJointIndex(name); - if (index == -1) { - index = getFauxJointIndex(name); - } if (index == -1) { return; }