On 2018-01-31 01:25 PM, Andres Rodriguez wrote:
Don't want an overly large numBufferBarriers/numTextureBarriers to blow
up the stack.

v2: handle malloc errors

Someone forgot to update his patch correctly before sending it out...


Suggested-by: Emil Velikov <[email protected]>
Signed-off-by: Andres Rodriguez <[email protected]>
---
  src/mesa/main/externalobjects.c | 14 ++++++++++----
  1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
index 463debd268..6a248f35a6 100644
--- a/src/mesa/main/externalobjects.c
+++ b/src/mesa/main/externalobjects.c
@@ -727,34 +727,37 @@ _mesa_WaitSemaphoreEXT(GLuint semaphore,
ASSERT_OUTSIDE_BEGIN_END(ctx); semObj = _mesa_lookup_semaphore_object(ctx, semaphore);
     if (!semObj)
        return;
FLUSH_VERTICES(ctx, 0);
     FLUSH_CURRENT(ctx, 0);
- bufObjs = alloca(sizeof(struct gl_buffer_object **) * numBufferBarriers);
+   bufObjs = malloc(sizeof(struct gl_buffer_object **) * numBufferBarriers);
     for (unsigned i = 0; i < numBufferBarriers; i++) {
        bufObjs[i] = _mesa_lookup_bufferobj(ctx, buffers[i]);
     }
- texObjs = alloca(sizeof(struct gl_texture_object **) * numTextureBarriers);
+   texObjs = malloc(sizeof(struct gl_texture_object **) * numTextureBarriers);
     for (unsigned i = 0; i < numTextureBarriers; i++) {
        texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
     }
ctx->Driver.ServerWaitSemaphoreObject(ctx, semObj,
                                           numBufferBarriers, bufObjs,
                                           numTextureBarriers, texObjs,
                                           srcLayouts);
+
+   free(bufObjs);
+   free(texObjs);
  }
void GLAPIENTRY
  _mesa_SignalSemaphoreEXT(GLuint semaphore,
                           GLuint numBufferBarriers,
                           const GLuint *buffers,
                           GLuint numTextureBarriers,
                           const GLuint *textures,
                           const GLenum *dstLayouts)
  {
@@ -770,34 +773,37 @@ _mesa_SignalSemaphoreEXT(GLuint semaphore,
ASSERT_OUTSIDE_BEGIN_END(ctx); semObj = _mesa_lookup_semaphore_object(ctx, semaphore);
     if (!semObj)
        return;
FLUSH_VERTICES(ctx, 0);
     FLUSH_CURRENT(ctx, 0);
- bufObjs = alloca(sizeof(struct gl_buffer_object **) * numBufferBarriers);
+   bufObjs = malloc(sizeof(struct gl_buffer_object **) * numBufferBarriers);
     for (unsigned i = 0; i < numBufferBarriers; i++) {
        bufObjs[i] = _mesa_lookup_bufferobj(ctx, buffers[i]);
     }
- texObjs = alloca(sizeof(struct gl_texture_object **) * numTextureBarriers);
+   texObjs = malloc(sizeof(struct gl_texture_object **) * numTextureBarriers);
     for (unsigned i = 0; i < numTextureBarriers; i++) {
        texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
     }
ctx->Driver.ServerSignalSemaphoreObject(ctx, semObj,
                                             numBufferBarriers, bufObjs,
                                             numTextureBarriers, texObjs,
                                             dstLayouts);
+
+   free(bufObjs);
+   free(texObjs);
  }
void GLAPIENTRY
  _mesa_ImportMemoryFdEXT(GLuint memory,
                          GLuint64 size,
                          GLenum handleType,
                          GLint fd)
  {
     GET_CURRENT_CONTEXT(ctx);
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to