Android: Fix memory leak when displaying images in the mainmenu (#8011)
authorrubenwardy <rw@rubenwardy.com>
Sat, 22 Dec 2018 07:46:41 +0000 (07:46 +0000)
committerLoic Blot <loic.blot@unix-experience.fr>
Sat, 22 Dec 2018 16:20:18 +0000 (17:20 +0100)
src/guiEngine.cpp

index 2d1bd6d44acbdd4bca6cb9671dd518d099f7d441..8661b1ca20d8e0965ad9c66b20130f51b60fca42 100644 (file)
@@ -87,22 +87,30 @@ MenuTextureSource::~MenuTextureSource()
 /******************************************************************************/
 video::ITexture* MenuTextureSource::getTexture(const std::string &name, u32 *id)
 {
-       if(id)
+       if (id)
                *id = 0;
-       if(name.empty())
+
+       if (name.empty())
                return NULL;
+
        m_to_delete.insert(name);
 
 #ifdef __ANDROID__
-       video::IImage *image = m_driver->createImageFromFile(name.c_str());
-       if (image) {
-               image = Align2Npot2(image, m_driver);
-               video::ITexture* retval = m_driver->addTexture(name.c_str(), image);
-               image->drop();
+       video::ITexture *retval = m_driver->findTexture(name.c_str());
+       if (retval)
                return retval;
-       }
-#endif
+
+       video::IImage *image = m_driver->createImageFromFile(name.c_str());
+       if (!image)
+               return NULL;
+
+       image = Align2Npot2(image, m_driver);
+       retval = m_driver->addTexture(name.c_str(), image);
+       image->drop();
+       return retval;
+#else
        return m_driver->getTexture(name.c_str());
+#endif
 }
 
 /******************************************************************************/