[Mesa-dev] [PATCH] mesa: remove usage of alloca in externalobjects.c v2
Andres Rodriguez
andresx7 at gmail.com
Wed Jan 31 18:25:56 UTC 2018
Don't want an overly large numBufferBarriers/numTextureBarriers to blow
up the stack.
v2: handle malloc errors
Suggested-by: Emil Velikov <emil.velikov at collabora.com>
Signed-off-by: Andres Rodriguez <andresx7 at 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
More information about the mesa-dev
mailing list