Don't want an overly large numBufferBarriers/numTextureBarriers to blow up the stack.
v2: handle malloc errors Suggested-by: Emil Velikov <emil.veli...@collabora.com> Signed-off-by: Andres Rodriguez <andre...@gmail.com> --- 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); -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev