Nux

Activity log for bug #1083149

Date Who What changed Old value New value Message
2012-11-26 13:10:32 Eleni Maria Stea bug added bug
2012-11-26 13:11:33 Eleni Maria Stea nux: importance Undecided Critical
2012-11-26 13:23:23 Eleni Maria Stea summary Critical design issue: The IOpenGLTexture2D destructor calls its own destructor Critical design issue: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop)
2012-11-26 13:23:53 Eleni Maria Stea summary Critical design issue: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop) Critical: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop)
2012-11-26 13:24:00 Eleni Maria Stea summary Critical: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop) Critical issue: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop)
2012-11-26 14:18:17 Eleni Maria Stea description ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same hash, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE: { int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID(); if(!glIsTexture(id)) printf("I am not a texture, I can't be deleted\n"); _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end()); m_NumTex2D--; m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject)); m_TotalGPUSize -= m_GPUSizeTex2D; break; } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual. ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same pointer, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE:       {         int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID();         if(!glIsTexture(id))           printf("I am not a texture, I can't be deleted\n");         _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end());         m_NumTex2D--;         m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject));         m_TotalGPUSize -= m_GPUSizeTex2D;         break;       } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual.
2012-11-26 14:19:25 Eleni Maria Stea description ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same pointer, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE:       {         int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID();         if(!glIsTexture(id))           printf("I am not a texture, I can't be deleted\n");         _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end());         m_NumTex2D--;         m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject));         m_TotalGPUSize -= m_GPUSizeTex2D;         break;       } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual. ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same pointer, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE:       {         int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID();         if(!glIsTexture(id))           printf("I am not a texture, I can't be deleted\n");         _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end());         m_NumTex2D--;         m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject));         m_TotalGPUSize -= m_GPUSizeTex2D;         break;       } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual but it still tries to delete the same texture multiple times.
2012-11-27 13:24:25 Eleni Maria Stea description ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same pointer, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE:       {         int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID();         if(!glIsTexture(id))           printf("I am not a texture, I can't be deleted\n");         _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end());         m_NumTex2D--;         m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject));         m_TotalGPUSize -= m_GPUSizeTex2D;         break;       } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual but it still tries to delete the same texture multiple times. ** Critical Design Error!! ** In IOpenGLTexture2D.cpp the IOpenGLTexture2D destructor is called 2 times for some textures and the UnReference function can't find the already deleted object. We end up with a loop and we see nothing. How to reproduce it: First of all you need to compile without optimisations (otherwise you will see nothing): export CXXFLAGS=-O0 export CFLAGS=-O0 make AM_DEFAULT_VERBOSITY=1 Then add this line at the beginning of the IOpenGLTexture2D::~IOpenGLTexture2D() destructor: printf("IOpenGLTexture2D texture destructor: %p, function called: %s\n", this, __PRETTY_FUNCTION__); Then go to the gputests and run the texture_copy_blur example. You won't get an image and at some points you will get prints like that: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() The exact same function (same pointer, same name, that is the IOpenGLTexture destructor) is called 2 times for some textures. Now, if you change the case RTTEXTURE of the function void RenderingStats::UnRegister(IOpenGLResource *GraphicsObject) in RunTimeStats.cpp to look like this: case RTTEXTURE:       {         int id = NUX_STATIC_CAST(IOpenGLBaseTexture *, GraphicsObject)->GetOpenGLID();         if(!glIsTexture(id))           printf("I am not a texture, I can't be deleted\n");         _texture_2d_array.erase(std::remove(_texture_2d_array.begin(), _texture_2d_array.end(), id), _texture_2d_array.end());         m_NumTex2D--;         m_GPUSizeTex2D -= GetTextureSize(NUX_REINTERPRET_CAST(IOpenGLBaseTexture *, GraphicsObject));         m_TotalGPUSize -= m_GPUSizeTex2D;         break;       } and recompile (WITHOUT optimisations) you will get something like this: IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted IOpenGLTexture2D texture destructor: 0xa917338, function called: virtual nux::IOpenGLTexture2D::~IOpenGLTexture2D() I am not a texture, I can't be deleted Because an already deleted texture can't be deleted again. If we add optimisations again, the texture_copy_blur example runs as usual but it still tries to delete the same texture multiple times. comment #2: This happens because 2 different IOpenGLTexture2D objects have the same texture id.
2012-11-29 15:27:11 Eleni Maria Stea nux: importance Critical Medium
2012-11-29 15:28:54 Eleni Maria Stea nux: status New In Progress
2012-11-29 15:43:26 Eleni Maria Stea summary Critical issue: The IOpenGLTexture2D destructor calls a function that calls the destructor again (loop) Invalid texture operations
2012-12-19 15:47:58 Eleni Maria Stea nux: status In Progress Fix Committed
2014-02-24 14:54:53 Eleni Maria Stea nux: assignee Eleni Maria Stea (hikiko)
2015-08-12 18:39:48 Stephen M. Webb nux: status Fix Committed Fix Released
2015-09-10 01:29:01 Marco Trevisan (Treviño) nux (Ubuntu): status New Fix Released
2015-09-10 01:29:02 Marco Trevisan (Treviño) nux (Ubuntu): importance Undecided Medium