Browse Source

Merge pull request #44695 from madmiraal/fix-44632

Remove all elements from monitored_bodies and monitored_areas when processed
Rémi Verschelde 4 years ago
parent
commit
2bd89ac249
2 changed files with 12 additions and 4 deletions
  1. 6 2
      servers/physics_2d/area_2d_sw.cpp
  2. 6 2
      servers/physics_3d/area_3d_sw.cpp

+ 6 - 2
servers/physics_2d/area_2d_sw.cpp

@@ -215,7 +215,9 @@ void Area2DSW::call_queries() {
 
 		for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_bodies.erase(E);
+				E = next;
 				continue;
 			}
 
@@ -250,7 +252,9 @@ void Area2DSW::call_queries() {
 
 		for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_areas.erase(E);
+				E = next;
 				continue;
 			}
 

+ 6 - 2
servers/physics_3d/area_3d_sw.cpp

@@ -215,7 +215,9 @@ void Area3DSW::call_queries() {
 
 		for (Map<BodyKey, BodyState>::Element *E = monitored_bodies.front(); E;) {
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_bodies.erase(E);
+				E = next;
 				continue;
 			}
 
@@ -250,7 +252,9 @@ void Area3DSW::call_queries() {
 
 		for (Map<BodyKey, BodyState>::Element *E = monitored_areas.front(); E;) {
 			if (E->get().state == 0) { // Nothing happened
-				E = E->next();
+				Map<BodyKey, BodyState>::Element *next = E->next();
+				monitored_areas.erase(E);
+				E = next;
 				continue;
 			}