fix memory leak in itemdef
authorsapier <Sapier at GMX dot net>
Sun, 7 Apr 2013 20:02:57 +0000 (22:02 +0200)
committerkwolekr <kwolekr@minetest.net>
Mon, 8 Apr 2013 02:20:01 +0000 (22:20 -0400)
cleanup useless code

src/itemdef.cpp

index 72ce0e6546dd990093e5b120bd5e0b622e5d3169..bb2946992b3baa664df964e4721ddf7eb2c13f6d 100644 (file)
@@ -226,6 +226,12 @@ class CItemDefManager: public IWritableItemDefManager
 public:
        CItemDefManager()
        {
+               for (std::map<std::string, ItemDefinition*>::iterator iter =
+                               m_item_definitions.begin(); iter != m_item_definitions.end();
+                               iter ++) {
+                       delete iter->second;
+               }
+               m_item_definitions.clear();
 #ifndef SERVER
                m_main_thread = get_current_thread_id();
 #endif
@@ -241,6 +247,7 @@ public:
                {
                        ClientCached *cc = *i;
                        cc->wield_mesh->drop();
+                       delete cc;
                }
 #endif
        }
@@ -328,11 +335,7 @@ public:
                }
 
                // Create a wield mesh
-               if(cc->wield_mesh != NULL)
-               {
-                       cc->wield_mesh->drop();
-                       cc->wield_mesh = NULL;
-               }
+               assert(cc->wield_mesh == NULL);
                if(def->type == ITEM_NODE && def->wield_image == "")
                {
                        need_node_mesh = true;
@@ -436,16 +439,16 @@ public:
                        /*
                                Use the node mesh as the wield mesh
                        */
-                       if(cc->wield_mesh == NULL)
-                       {
-                               // Scale to proper wield mesh proportions
-                               scaleMesh(node_mesh, v3f(30.0, 30.0, 30.0)
-                                               * def->wield_scale);
-                               cc->wield_mesh = node_mesh;
-                               cc->wield_mesh->grab();
-                       }
 
-                       // falling outside of here deletes node_mesh
+                       // Scale to proper wield mesh proportions
+                       scaleMesh(node_mesh, v3f(30.0, 30.0, 30.0)
+                                       * def->wield_scale);
+
+                       cc->wield_mesh = node_mesh;
+                       cc->wield_mesh->grab();
+
+                       //no way reference count can be smaller than 2 in this place!
+                       assert(cc->wield_mesh->getReferenceCount() >= 2);
                }
 
                // Put in cache