Fix a memory leak (#5636)
authorDániel Juhász <juhdanad@gmail.com>
Fri, 21 Apr 2017 22:55:07 +0000 (00:55 +0200)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Fri, 21 Apr 2017 22:55:07 +0000 (00:55 +0200)
src/mesh.cpp
src/mesh.h

index 0a5b7fb6c1c64517bffcbfef6defb1a40464446b..824d6891bdc1113d4917aa33c4c747e2cbb2ee49 100644 (file)
@@ -387,37 +387,39 @@ void recalculateBoundingBox(scene::IMesh *src_mesh)
 
 scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer)
 {
-       scene::IMeshBuffer *clone = NULL;
        switch (mesh_buffer->getVertexType()) {
        case video::EVT_STANDARD: {
                video::S3DVertex *v = (video::S3DVertex *) mesh_buffer->getVertices();
                u16 *indices = mesh_buffer->getIndices();
-               scene::SMeshBuffer *temp_buf = new scene::SMeshBuffer();
-               temp_buf->append(v, mesh_buffer->getVertexCount(), indices,
+               scene::SMeshBuffer *cloned_buffer = new scene::SMeshBuffer();
+               cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices,
                        mesh_buffer->getIndexCount());
-               return temp_buf;
-               break;
+               return cloned_buffer;
        }
        case video::EVT_2TCOORDS: {
                video::S3DVertex2TCoords *v =
                        (video::S3DVertex2TCoords *) mesh_buffer->getVertices();
                u16 *indices = mesh_buffer->getIndices();
-               scene::SMeshBufferTangents *temp_buf = new scene::SMeshBufferTangents();
-               temp_buf->append(v, mesh_buffer->getVertexCount(), indices,
+               scene::SMeshBufferTangents *cloned_buffer =
+                       new scene::SMeshBufferTangents();
+               cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices,
                        mesh_buffer->getIndexCount());
-               break;
+               return cloned_buffer;
        }
        case video::EVT_TANGENTS: {
                video::S3DVertexTangents *v =
                        (video::S3DVertexTangents *) mesh_buffer->getVertices();
                u16 *indices = mesh_buffer->getIndices();
-               scene::SMeshBufferTangents *temp_buf = new scene::SMeshBufferTangents();
-               temp_buf->append(v, mesh_buffer->getVertexCount(), indices,
+               scene::SMeshBufferTangents *cloned_buffer =
+                       new scene::SMeshBufferTangents();
+               cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices,
                        mesh_buffer->getIndexCount());
-               break;
+               return cloned_buffer;
        }
        }
-       return clone;
+       // This should not happen.
+       sanity_check(false);
+       return NULL;
 }
 
 scene::SMesh* cloneMesh(scene::IMesh *src_mesh)
index 0e946caaba96e3d8c9176be7ccf2a816d7de2f4e..adaf0c83634967ae37ee6cf3d116930fd4931041 100644 (file)
@@ -85,6 +85,7 @@ void rotateMeshYZby (scene::IMesh *mesh, f64 degrees);
 
 /*
  *  Clone the mesh buffer.
+ *  The returned pointer should be dropped.
  */
 scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer);