On Thu, Aug 21, 2014 at 12:06 PM, Aaron Watry <awa...@gmail.com> wrote: > dlopen allocates a string on dlopen failure which is retrieved via dlerror. In > order to free that string, you need to retrieve and then free it. > > In order to keep things legit the windows/other util_dl_error paths allocate > and then copy their error message into a buffer as well. > > Signed-off-by: Aaron Watry <awa...@gmail.com> > --- > src/gallium/auxiliary/pipe-loader/pipe_loader.c | 5 +++++ > src/gallium/auxiliary/util/u_dl.c | 13 +++++++++++-- > 2 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader.c > b/src/gallium/auxiliary/pipe-loader/pipe_loader.c > index 8e79f85..bf3acca 100644 > --- a/src/gallium/auxiliary/pipe-loader/pipe_loader.c > +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader.c > @@ -25,6 +25,8 @@ > * > **************************************************************************/ > > +#include <dlfcn.h> > + > #include "pipe_loader_priv.h" > > #include "util/u_inlines.h" > @@ -101,6 +103,9 @@ pipe_loader_find_module(struct pipe_loader_device *dev, > if (lib) { > return lib; > } > + > + //Retrieve the dlerror() str so that it can be freed properly > + FREE(util_dl_error()); > } > } > > diff --git a/src/gallium/auxiliary/util/u_dl.c > b/src/gallium/auxiliary/util/u_dl.c > index aca435d..7f9231f 100644 > --- a/src/gallium/auxiliary/util/u_dl.c > +++ b/src/gallium/auxiliary/util/u_dl.c > @@ -39,6 +39,7 @@ > > #include "u_dl.h" > #include "u_pointer.h" > +#include "u_memory.h" > > > struct util_dl_library * > @@ -87,8 +88,16 @@ util_dl_error(void) > #if defined(PIPE_OS_UNIX) > return dlerror(); > #elif defined(PIPE_OS_WINDOWS) > - return "unknown error"; > + char *error = CALLOC(14, sizeof(char)); > + if (error == NULL) { > + return NULL; > + } > + return strcpy(error, "unknown error"); > #else > - return "unknown error"; > + char *error = CALLOC(14, sizeof(char)); > + if (error == NULL) { > + return NULL; > + } > + return strcpy(error, "unknown error");
return strdup("unknown error") seems like it'd be sufficient, no? > #endif > } > -- > 1.9.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev