Hello Tapani, since you wrote the original code, could you have a look at this patch?
Many thanks, Gert Am Freitag, den 16.11.2018, 19:12 +0100 schrieb Gert Wollny: > From: Gert Wollny <gert.wol...@collabora.com> > > When a shader program is de-serialized the gl_shader_program passed > in > may actually still hold memory allocations for the transform feedback > varyings. If that is the case, free the varying names and reallocate > the new storage for the names array. > > This fixes a memory leak: > Direct leak of 48 byte(s) in 6 object(s) allocated from: > in malloc (/usr/lib64/gcc/x86_64-pc-linux- > gnu/7.3.0/libasan.so+0xdb880) > in transform_feedback_varyings > ../../samba/mesa/src/mesa/main/transformfeedback.c:875 > in _mesa_TransformFeedbackVaryings > ../../samba/mesa/src/mesa/main/transformfeedback.c:985 > ... > Indirect leak of 42 byte(s) in 6 object(s) allocated from: > in __interceptor_strdup (/usr/lib64/gcc/x86_64-pc-linux- > gnu/7.3.0/libasan.so+0x761c8) > in transform_feedback_varyings > ../../samba/mesa/src/mesa/main/transformfeedback.c:887 > in _mesa_TransformFeedbackVaryings > ../../samba/mesa/src/mesa/main/transformfeedback.c:985 > > Fixes: ab2643e4b06f63c93a57624003679903442634a8 > glsl: serialize data from glTransformFeedbackVaryings > > Signed-off-by: Gert Wollny <gert.wol...@collabora.com> > --- > src/compiler/glsl/serialize.cpp | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/src/compiler/glsl/serialize.cpp > b/src/compiler/glsl/serialize.cpp > index 267700e7e7..26d8ec4b75 100644 > --- a/src/compiler/glsl/serialize.cpp > +++ b/src/compiler/glsl/serialize.cpp > @@ -360,13 +360,20 @@ read_xfb(struct blob_reader *metadata, struct > gl_shader_program *shProg) > if (xfb_stage == ~0u) > return; > > + if (shProg->TransformFeedback.VaryingNames) { > + for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; > ++i) > + free(shProg->TransformFeedback.VaryingNames[i]); > + } > + > /* Data set by glTransformFeedbackVaryings. */ > shProg->TransformFeedback.BufferMode = > blob_read_uint32(metadata); > blob_copy_bytes(metadata, &shProg- > >TransformFeedback.BufferStride, > sizeof(shProg->TransformFeedback.BufferStride)); > shProg->TransformFeedback.NumVarying = > blob_read_uint32(metadata); > + > shProg->TransformFeedback.VaryingNames = (char **) > - malloc(shProg->TransformFeedback.NumVarying * sizeof(GLchar > *)); > + realloc(shProg->TransformFeedback.VaryingNames, > + shProg->TransformFeedback.NumVarying * sizeof(GLchar > *)); > /* Note, malloc used with VaryingNames. */ > for (unsigned i = 0; i < shProg->TransformFeedback.NumVarying; > i++) > shProg->TransformFeedback.VaryingNames[i] = _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev