Browse Source

Fixed memleak by running Init multiple times (ApplyAttributes/Editor thing)

Sergey Lapin 8 years ago
parent
commit
2fd97bd798
1 changed files with 10 additions and 1 deletions
  1. 10 1
      Source/Urho3D/Physics/RaycastVehicle.cpp

+ 10 - 1
Source/Urho3D/Physics/RaycastVehicle.cpp

@@ -56,7 +56,7 @@ public:
             if (physWorld_) {
             if (physWorld_) {
                 btDynamicsWorld *pbtDynWorld = (btDynamicsWorld*) physWorld_->GetWorld();
                 btDynamicsWorld *pbtDynWorld = (btDynamicsWorld*) physWorld_->GetWorld();
                 pbtDynWorld->removeAction(vehicle_);
                 pbtDynWorld->removeAction(vehicle_);
-	    }
+            }
             delete vehicle_;
             delete vehicle_;
         }
         }
         vehicle_ = 0;
         vehicle_ = 0;
@@ -74,6 +74,15 @@ public:
         int forwardIndex = 2;
         int forwardIndex = 2;
         PhysicsWorld *pPhysWorld = scene->GetComponent<PhysicsWorld>();
         PhysicsWorld *pPhysWorld = scene->GetComponent<PhysicsWorld>();
         btDynamicsWorld *pbtDynWorld = (btDynamicsWorld*) pPhysWorld->GetWorld();
         btDynamicsWorld *pbtDynWorld = (btDynamicsWorld*) pPhysWorld->GetWorld();
+	if (!pbtDynWorld)
+		return;
+        if (vehicleRayCaster_)
+                delete vehicleRayCaster_;
+        if (vehicle_)
+        {
+		pbtDynWorld->removeAction(vehicle_);
+		delete vehicle_;
+        }
 
 
         vehicleRayCaster_ = new btDefaultVehicleRaycaster(pbtDynWorld);
         vehicleRayCaster_ = new btDefaultVehicleRaycaster(pbtDynWorld);
         btRigidBody *bthullBody = body->GetBody();
         btRigidBody *bthullBody = body->GetBody();