Commit 5da143cb by Lingfeng Yang

[emulator] Delete VAOs starting from highest

If VAOs are deleted starting from 0, then the following happens when an app's context has genned two VAO's that are both != 0, and the first of the two nonzero VAOs is the current one: VAO 0 VAO 1 <- current VAO 2 in context dtor loop over vao map: delete vao 0 (done) delete vao 1: is current, so bind 0: in bind 0, we create a new map entry since 0 was deleted next loop iter deletes vao 0 again (done) *** at this point, vao 0 pointer refers to freed memory *** next loop iter wants to delete vao 2, but the current vao is 0 and refers to freed memory. then, in Context::deleteVertexArray: if (getCurrentVertexArray()->name...) <- Segmentation fault (core dumped) This CL deletes VAO 0 last. Change-Id: Ifa606ad7517cd213f21606577d3bdd8d810b640d Reviewed-on: https://swiftshader-review.googlesource.com/8350Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarLingfeng Yang <lfy@google.com>
parent 216980a5
......@@ -49,6 +49,11 @@ public:
return map.begin()->first;
}
GLuint lastName()
{
return map.rbegin()->first;
}
GLuint allocate(ObjectType *object = nullptr)
{
GLuint name = freeName;
......
......@@ -210,7 +210,7 @@ Context::~Context()
while(!mVertexArrayNameSpace.empty())
{
deleteVertexArray(mVertexArrayNameSpace.firstName());
deleteVertexArray(mVertexArrayNameSpace.lastName());
}
while(!mTransformFeedbackNameSpace.empty())
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment