Browse Source

Merge pull request #217 from blackberry-gaming/next-cculy

Fixed a memory leak in PhysicsCollisionShape
Sean Paul Taylor 13 years ago
parent
commit
79fc82be04
2 changed files with 43 additions and 0 deletions
  1. 41 0
      gameplay/src/PhysicsCollisionShape.cpp
  2. 2 0
      gameplay/src/PhysicsCollisionShape.h

+ 41 - 0
gameplay/src/PhysicsCollisionShape.cpp

@@ -60,6 +60,24 @@ PhysicsCollisionShape::Definition::Definition()
     memset(&data, 0, sizeof(data));
 }
 
+PhysicsCollisionShape::Definition::Definition(const Definition& definition)
+{
+    // Bitwise-copy the definition object (equivalent to default copy constructor).
+    memcpy(this, &definition, sizeof(PhysicsCollisionShape::Definition));
+
+    // Handle the types that have reference-counted members.
+    switch (type)
+    {
+    case PhysicsCollisionShape::SHAPE_HEIGHTFIELD:
+        data.heightfield->addRef();
+        break;
+
+    case PhysicsCollisionShape::SHAPE_MESH:
+        data.mesh->addRef();
+        break;
+    }
+}
+
 PhysicsCollisionShape::Definition::~Definition()
 {
     switch (type)
@@ -74,6 +92,29 @@ PhysicsCollisionShape::Definition::~Definition()
     }
 }
 
+PhysicsCollisionShape::Definition& PhysicsCollisionShape::Definition::operator=(const Definition& definition)
+{
+    if (this != &definition)
+    {
+        // Bitwise-copy the definition object (equivalent to default copy constructor).
+        memcpy(this, &definition, sizeof(PhysicsCollisionShape::Definition));
+
+        // Handle the types that have reference-counted members.
+        switch (type)
+        {
+        case PhysicsCollisionShape::SHAPE_HEIGHTFIELD:
+            data.heightfield->addRef();
+            break;
+
+        case PhysicsCollisionShape::SHAPE_MESH:
+            data.mesh->addRef();
+            break;
+        }
+    }
+
+    return *this;
+}
+
 PhysicsCollisionShape::Definition* PhysicsCollisionShape::Definition::create(Node* node, Properties* properties)
 {
     // Check if the properties is valid and has a valid namespace.

+ 2 - 0
gameplay/src/PhysicsCollisionShape.h

@@ -54,6 +54,8 @@ public:
     private:
 
         Definition();
+        Definition(const Definition& definition);
+        Definition& operator=(const Definition& definition);
 
         /**
          * Creates a PhysicsCollisionShape#Definition object from the given properties object (for the given node).