mirror of
https://github.com/overte-org/overte.git
synced 2025-07-29 13:10:09 +02:00
Merge pull request #12200 from sethalves/fix-avatar-entity-delete-deadlock
avoid a deadlock when clearing avatar entities
This commit is contained in:
commit
92f8f9d2c0
1 changed files with 7 additions and 5 deletions
|
@ -328,13 +328,15 @@ void Avatar::updateAvatarEntities() {
|
||||||
AvatarEntityIDs recentlyDettachedAvatarEntities = getAndClearRecentlyDetachedIDs();
|
AvatarEntityIDs recentlyDettachedAvatarEntities = getAndClearRecentlyDetachedIDs();
|
||||||
if (!recentlyDettachedAvatarEntities.empty()) {
|
if (!recentlyDettachedAvatarEntities.empty()) {
|
||||||
// only lock this thread when absolutely necessary
|
// only lock this thread when absolutely necessary
|
||||||
|
AvatarEntityMap avatarEntityData;
|
||||||
_avatarEntitiesLock.withReadLock([&] {
|
_avatarEntitiesLock.withReadLock([&] {
|
||||||
foreach (auto entityID, recentlyDettachedAvatarEntities) {
|
avatarEntityData = _avatarEntityData;
|
||||||
if (!_avatarEntityData.contains(entityID)) {
|
|
||||||
entityTree->deleteEntity(entityID, true, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
foreach (auto entityID, recentlyDettachedAvatarEntities) {
|
||||||
|
if (!avatarEntityData.contains(entityID)) {
|
||||||
|
entityTree->deleteEntity(entityID, true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// remove stale data hashes
|
// remove stale data hashes
|
||||||
foreach (auto entityID, recentlyDettachedAvatarEntities) {
|
foreach (auto entityID, recentlyDettachedAvatarEntities) {
|
||||||
|
|
Loading…
Reference in a new issue