History

I'm locking something wrong

Zach Fox committed 9 years ago

Commit baad5f11 parent d370eee3 files · +22 −14Browse files

Showing the changes to interface/src/scripting/SelectionScriptingInterface.cpp (1 of 3 files). Show all

Unified · Split

interface/src/scripting/SelectionScriptingInterface.cpp+17−11
@@ -46,6 +46,7 @@ bool GameplayObjects::removeFromGameplayObjects(const OverlayID& overlayID) { · 45 unmodified lines
4646 return true;
4747 }
4848
49+
4950 SelectionScriptingInterface::SelectionScriptingInterface() {
5051 }
5152
@@ -71,8 +72,9 @@ bool SelectionScriptingInterface::removeFromSelectedItemsList(const QString& lis · 19 unmodified lines
7172 }
7273
7374 template <class T> bool SelectionScriptingInterface::addToGameplayObjects(const QString& listName, T idToAdd) {
74− if (_selectedItemsListMap.contains(listName)) {
75− auto currentList = _selectedItemsListMap.take(listName);
75+ QWriteLocker writeLock(&_mapLock);
76+ auto currentList = _selectedItemsListMap.value(listName);
77+ if (currentList.getContainsData()) {
7678 currentList.addToGameplayObjects(idToAdd);
7779 _selectedItemsListMap.insert(listName, currentList);
7880
@@ -84,8 +86,9 @@ template <class T> bool SelectionScriptingInterface::addToGameplayObjects(const · 5 unmodified lines
8486 }
8587 }
8688 template <class T> bool SelectionScriptingInterface::removeFromGameplayObjects(const QString& listName, T idToRemove) {
87− if (_selectedItemsListMap.contains(listName)) {
88− auto currentList = _selectedItemsListMap.take(listName);
89+ QWriteLocker writeLock(&_mapLock);
90+ auto currentList = _selectedItemsListMap.value(listName);
91+ if (currentList.getContainsData()) {
8992 currentList.removeFromGameplayObjects(idToRemove);
9093 _selectedItemsListMap.insert(listName, currentList);
9194
@@ -100,12 +103,14 @@ template <class T> bool SelectionScriptingInterface::removeFromGameplayObjects(c · 8 unmodified lines
100103 //
101104
102105 GameplayObjects SelectionScriptingInterface::getList(const QString& listName) {
106+ QReadLocker readLock(&_mapLock);
103107 return _selectedItemsListMap.value(listName);
104108 }
105109
106110 void SelectionScriptingInterface::printList(const QString& listName) {
107− if (_selectedItemsListMap.contains(listName)) {
108− auto currentList = _selectedItemsListMap.value(listName);
111+ QReadLocker readLock(&_mapLock);
112+ auto currentList = _selectedItemsListMap.value(listName);
113+ if (currentList.getContainsData()) {
109114
110115 qDebug() << "Avatar IDs:";
111116 for (auto i : currentList.getAvatarIDs()) {
@@ -130,6 +135,7 @@ void SelectionScriptingInterface::printList(const QString& listName) { · 18 unmodified lines
130135 }
131136
132137 bool SelectionScriptingInterface::removeListFromMap(const QString& listName) {
138+ QWriteLocker writeLock(&_mapLock);
133139 if (_selectedItemsListMap.remove(listName)) {
134140 emit selectedItemsListChanged(listName);
135141 return true;
@@ -142,8 +148,7 @@ bool SelectionScriptingInterface::removeListFromMap(const QString& listName) { · 6 unmodified lines
142148 SelectionToSceneHandler::SelectionToSceneHandler() {
143149 }
144150
145−void SelectionToSceneHandler::initialize(render::ScenePointer mainScene, const QString& listName) {
146− _mainScene = mainScene;
151+void SelectionToSceneHandler::initialize(const QString& listName) {
147152 _listName = listName;
148153 }
149154
@@ -154,11 +159,12 @@ void SelectionToSceneHandler::selectedItemsListChanged(const QString& listName) · 4 unmodified lines
154159 }
155160
156161 void SelectionToSceneHandler::updateSceneFromSelectedList() {
157− if (_mainScene) {
162+ auto mainScene = qApp->getMain3DScene();
163+ if (mainScene) {
158164 GameplayObjects thisList = DependencyManager::get<SelectionScriptingInterface>()->getList(_listName);
159− render::Transaction transaction;
160165
161166 if (thisList.getContainsData()) {
167+ render::Transaction transaction;
162168 render::ItemIDs finalList;
163169 render::ItemID currentID;
164170 auto entityTree = qApp->getEntities()->getTree();
@@ -202,7 +208,7 @@ void SelectionToSceneHandler::updateSceneFromSelectedList() { · 37 unmodified lines
202208 render::Selection selection(_listName.toStdString(), finalList);
203209 transaction.resetSelection(selection);
204210
205− _mainScene->enqueueTransaction(transaction);
211+ mainScene->enqueueTransaction(transaction);
206212 } else {
207213 qWarning() << "List of GameplayObjects doesn't exist in thisList";
208214 }