On 03.04.2017 20:53, Bartosz Tomczyk wrote:
Actually, I can just set only batch->used to 0, but it seems to error prone. When someone adds some fields to batch struct, it will be easy to miss that it should be initialized in glthread_unmarshal_batch.
Better to have it fail early and loudly with garbage data, rather than silently if 0 happens to be an accepted value. I think it should be changed (unless there's a good reason to rely on it on purpose, but I don't see one...).
Cheers, Nicolai
Anyway I can change it if you want to. On Mon, Apr 3, 2017 at 8:42 PM, Nicolai Hähnle <nhaeh...@gmail.com <mailto:nhaeh...@gmail.com>> wrote: On 03.04.2017 20:38, Bartosz Tomczyk wrote: --- src/mesa/main/glthread.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/mesa/main/glthread.c b/src/mesa/main/glthread.c index 3f07c420d4..aa14292e59 100644 --- a/src/mesa/main/glthread.c +++ b/src/mesa/main/glthread.c @@ -53,7 +53,8 @@ glthread_allocate_batch(struct gl_context *ctx) } static void -glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch) +glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch, + const bool release_batch) { size_t pos = 0; @@ -64,7 +65,10 @@ glthread_unmarshal_batch(struct gl_context *ctx, struct glthread_batch *batch) assert(pos == batch->used); - free(batch); + if (release_batch) + free(batch); + else + memset(batch, 0, offsetof(struct glthread_batch, buffer)); Hmm. Why do we memset the batch? Seems like a trivial optimization to just not do that... Apart from that, the patch looks good to me. Cheers, Nicolai } static void * @@ -103,7 +107,7 @@ glthread_worker(void *data) glthread->busy = true; pthread_mutex_unlock(&glthread->mutex); - glthread_unmarshal_batch(ctx, batch); + glthread_unmarshal_batch(ctx, batch, true); pthread_mutex_lock(&glthread->mutex); glthread->busy = false; @@ -214,7 +218,7 @@ _mesa_glthread_flush_batch_locked(struct gl_context *ctx) * need to restore it when it returns. */ if (false) { - glthread_unmarshal_batch(ctx, batch); + glthread_unmarshal_batch(ctx, batch, true); _glapi_set_dispatch(ctx->CurrentClientDispatch); return; } @@ -269,9 +273,8 @@ _mesa_glthread_finish(struct gl_context *ctx) if (!(glthread->batch_queue || glthread->busy)) { if (glthread->batch && glthread->batch->used) { struct _glapi_table *dispatch = _glapi_get_dispatch(); - glthread_unmarshal_batch(ctx, glthread->batch); + glthread_unmarshal_batch(ctx, glthread->batch, false); _glapi_set_dispatch(dispatch); - glthread_allocate_batch(ctx); } } else { _mesa_glthread_flush_batch_locked(ctx); -- Lerne, wie die Welt wirklich ist, Aber vergiss niemals, wie sie sein sollte.
-- Lerne, wie die Welt wirklich ist, Aber vergiss niemals, wie sie sein sollte. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev