Browse Source

Merge pull request #10177 from bojidar-bg/9832-fix-infinite-loop

Fix freeze on close of game using 2D physics introduced by #9832
Rémi Verschelde 8 years ago
parent
commit
0f23c4a3c0

+ 2 - 2
servers/physics/physics_server_sw.cpp

@@ -493,8 +493,8 @@ void PhysicsServerSW::body_set_space(RID p_body, RID p_space) {
 	if (body->get_space() == space)
 	if (body->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	while (body->get_constraint_map().size()) {
-		RID self = body->get_constraint_map().front()->key()->get_self();
+	for (Map<ConstraintSW *, int>::Element *E = body->get_constraint_map().front(); E; E = E->next()) {
+		RID self = E->key()->get_self();
 		if (!self.is_valid())
 		if (!self.is_valid())
 			continue;
 			continue;
 		free(self);
 		free(self);

+ 2 - 2
servers/physics_2d/physics_2d_server_sw.cpp

@@ -548,8 +548,8 @@ void Physics2DServerSW::body_set_space(RID p_body, RID p_space) {
 	if (body->get_space() == space)
 	if (body->get_space() == space)
 		return; //pointless
 		return; //pointless
 
 
-	while (body->get_constraint_map().size()) {
-		RID self = body->get_constraint_map().front()->key()->get_self();
+	for (Map<Constraint2DSW *, int>::Element *E = body->get_constraint_map().front(); E; E = E->next()) {
+		RID self = E->key()->get_self();
 		if (!self.is_valid())
 		if (!self.is_valid())
 			continue;
 			continue;
 		free(self);
 		free(self);