Browse Source

Merge pull request #44696 from madmiraal/fix-44632-3.2

[3.x] Remove all elements from monitored_bodies and monitored_areas when processed
Rémi Verschelde 4 years ago
parent
commit
ab4c73604d
2 changed files with 12 additions and 4 deletions
  1. 6 2
      servers/physics/area_sw.cpp
  2. 6 2
      servers/physics_2d/area_2d_sw.cpp

+ 6 - 2
servers/physics/area_sw.cpp

@@ -192,7 +192,9 @@ void AreaSW::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;
 			}
 
@@ -228,7 +230,9 @@ void AreaSW::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_2d/area_2d_sw.cpp

@@ -192,7 +192,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;
 			}
 
@@ -228,7 +230,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;
 			}