From 22af5b27abe9012e2d1cfa6fb6ef69b2377603fb Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Fri, 23 Oct 2015 12:55:48 -0700 Subject: [PATCH] avoid shared_from_this while constructing --- libraries/avatars/src/AvatarData.cpp | 1 + libraries/entities/src/EntityItem.cpp | 1 + libraries/shared/src/SpatiallyNestable.cpp | 5 +++++ libraries/shared/src/SpatiallyNestable.h | 2 ++ 4 files changed, 9 insertions(+) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index a1db573d8d..7f0f758b87 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -60,6 +60,7 @@ AvatarData::AvatarData() : setBodyPitch(0.0f); setBodyYaw(-90.0f); setBodyRoll(0.0f); + _constructing = false; } AvatarData::~AvatarData() { diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index 7c9f3139df..fd4a4b298c 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -85,6 +85,7 @@ EntityItem::EntityItem(const EntityItemID& entityItemID) : quint64 now = usecTimestampNow(); _lastSimulated = now; _lastUpdated = now; + _constructing = false; } EntityItem::~EntityItem() { diff --git a/libraries/shared/src/SpatiallyNestable.cpp b/libraries/shared/src/SpatiallyNestable.cpp index a813a37bfe..9d1220c214 100644 --- a/libraries/shared/src/SpatiallyNestable.cpp +++ b/libraries/shared/src/SpatiallyNestable.cpp @@ -32,6 +32,11 @@ SpatiallyNestablePointer SpatiallyNestable::getParentPointer() const { return nullptr; } + if (_constructing) { + // we can't use shared_from_this yet, so stop here. + return nullptr; + } + SpatiallyNestableConstPointer constThisPointer = shared_from_this(); SpatiallyNestablePointer thisPointer = std::const_pointer_cast(constThisPointer); // ermahgerd !!! diff --git a/libraries/shared/src/SpatiallyNestable.h b/libraries/shared/src/SpatiallyNestable.h index e0ee5bdb74..108da796a0 100644 --- a/libraries/shared/src/SpatiallyNestable.h +++ b/libraries/shared/src/SpatiallyNestable.h @@ -82,6 +82,8 @@ public: NestableTypes::NestableType getNestableType() const { return _nestableType; } protected: + bool _constructing = true; + NestableTypes::NestableType _nestableType; // EntityItem or an AvatarData QUuid _id; QUuid _parentID; // what is this thing's transform relative to?