Fix memory leaks in GenericCAO, ShaderSource and Player classes

stable-0.4
sapier 2014-07-02 23:33:18 +02:00
parent 3d6d66b181
commit b8343cd11c
3 changed files with 8 additions and 3 deletions

View File

@ -670,6 +670,7 @@ GenericCAO::~GenericCAO()
{ {
m_env->removePlayerName(m_name.c_str()); m_env->removePlayerName(m_name.c_str());
} }
removeFromScene(true);
} }
core::aabbox3d<f32>* GenericCAO::getSelectionBox() core::aabbox3d<f32>* GenericCAO::getSelectionBox()
@ -735,7 +736,7 @@ ClientActiveObject* GenericCAO::getParent()
void GenericCAO::removeFromScene(bool permanent) void GenericCAO::removeFromScene(bool permanent)
{ {
if(permanent) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals) if((m_env != 0) && (permanent)) // Should be true when removing the object permanently and false when refreshing (eg: updating visuals)
{ {
for(std::vector<u16>::iterator ci = m_children.begin(); for(std::vector<u16>::iterator ci = m_children.begin();
ci != m_children.end(); ci++) ci != m_children.end(); ci++)

View File

@ -100,6 +100,7 @@ Player::Player(IGameDef *gamedef):
Player::~Player() Player::~Player()
{ {
clearHud();
} }
// Horizontal acceleration (X and Z), Y direction is ignored // Horizontal acceleration (X and Z), Y direction is ignored

View File

@ -383,13 +383,16 @@ ShaderSource::ShaderSource(IrrlichtDevice *device):
ShaderSource::~ShaderSource() ShaderSource::~ShaderSource()
{ {
//m_shader_callback->drop();
for (std::vector<IShaderConstantSetter*>::iterator iter = m_global_setters.begin(); for (std::vector<IShaderConstantSetter*>::iterator iter = m_global_setters.begin();
iter != m_global_setters.end(); iter++) { iter != m_global_setters.end(); iter++) {
delete *iter; delete *iter;
} }
m_global_setters.clear(); m_global_setters.clear();
if (m_shader_callback) {
m_shader_callback->drop();
m_shader_callback = NULL;
}
} }
u32 ShaderSource::getShader(const std::string &name, u32 ShaderSource::getShader(const std::string &name,