As far as I can see with the image viewer (wmiv) I am working on and which is using wrlib, without that patch some memory are lost.
Thx, David On Wednesday, April 16, 2014, Carlos R. Mafra <crma...@gmail.com> wrote: > On Mon, 31 Mar 2014 at 23:43:17 +0800, David Maciejak wrote: > > Same as previous patches but this time to add some functions > > to wrlib to release all memory allocated. > > But it should be pointed out that if you don't call these functions > the memory is freed anyway by the operating system once the application > is closed. But unless someone objects I will apply this anyway. > > > The apps using wrlib have to call the cleaning functions before leaving. > > > > > > > > > --- > > wrlib/context.c | 11 +++++++++++ > > wrlib/convert.c | 27 ++++++++++++++++++++++++++- > > wrlib/libwraster.map | 1 + > > wrlib/load.c | 17 +++++++++++++++++ > > wrlib/wraster.h | 7 +++++++ > > 5 files changed, 62 insertions(+), 1 deletion(-) > > > > diff --git a/wrlib/context.c b/wrlib/context.c > > index b6794d0..04228ed 100644 > > --- a/wrlib/context.c > > +++ b/wrlib/context.c > > @@ -688,6 +688,17 @@ RContext *RCreateContext(Display * dpy, int > > screen_number, const RContextAttribu > > return context; > > } > > > > +void RDestroyContext(RContext * context) > > +{ > > + if (context) { > > + if (context && context->attribs) > > + free(context->attribs); > > + if (context && context->copy_gc) > > + XFreeGC(context->dpy, context->copy_gc); > > + free(context); > > + } > > +} > > + > > static Bool bestContext(Display * dpy, int screen_number, RContext * > context) > > { > > XVisualInfo *vinfo = NULL, rvinfo; > > diff --git a/wrlib/convert.c b/wrlib/convert.c > > index f3c9a49..867a3d8 100644 > > --- a/wrlib/convert.c > > +++ b/wrlib/convert.c > > @@ -62,6 +62,32 @@ typedef struct RStdConversionTable { > > static RConversionTable *conversionTable = NULL; > > static RStdConversionTable *stdConversionTable = NULL; > > > > +static void release_conversion_table() > > +{ > > + RConversionTable *tmp = conversionTable; > > + while (tmp) { > > + RConversionTable *tmp_to_delete = tmp; > > + tmp = tmp->next; > > + free(tmp_to_delete); > > + } > > +} > > + > > +static void release_std_conversion_table() > > +{ > > + RStdConversionTable *tmp = stdConversionTable; > > + while (tmp) { > > + RStdConversionTable *tmp_to_delete = tmp; > > + tmp = tmp->next; > > + free(tmp_to_delete); > > + } > > +} > > + > > +void RDestroyConvertTables() > > +{ > > + release_conversion_table(); > > + release_std_conversion_table(); > > +} > > + > > static unsigned short *computeTable(unsigned short mask) > > { > > RConversionTable *tmp = conversionTable; > > @@ -356,7 +382,6 @@ static RXImage *image2TrueColor(RContext * ctx, > > RImage * image) > > } > > > > } > > - > > return ximg; > > } > > > > diff --git a/wrlib/libwraster.map b/wrlib/libwraster.map > > index 6e165ef..422af75 100644 > > --- a/wrlib/libwraster.map > > +++ b/wrlib/libwraster.map > > @@ -33,6 +33,7 @@ LIBWRASTER3 > > RConvertImageMask; > > RCopyArea; > > RCreateContext; > > + RDestroyContext; > > RCreateImage; > > RCreateImageFromDrawable; > > RCreateImageFromXImage; > > diff --git a/wrlib/load.c b/wrlib/load.c > > index 8e0d34d..5e0e8cb 100644 > > --- a/wrlib/load.c > > +++ b/wrlib/load.c > > @@ -105,11 +105,28 @@ char **RSupportedFileFormats(void) > > return tmp; > > } > > > > +static void destroy_cache(void) > > +{ > > + if (RImageCacheSize > 0) { > > + for (int i = 0; i < RImageCacheSize; i++) { > > + if (RImageCache[i].file) { > > + free(RImageCache[i].file); > > + RImageCache[i].file = NULL; > > + RReleaseImage(RImageCache[i].image); > > + } > > + > > + } > > + free(RImageCache); > > + } > > +} > > + > > /* cleaning third-party libs at shutdown */ > > void RShutdown() { > > #ifdef USE_MAGICK > > MagickWandTerminus(); > > #endif > > + destroy_cache(); > > + RDestroyConvertTables(); > > } > > > > static void init_cache(void) > > diff --git a/wrlib/wraster.h b/wrlib/wraster.h > > index c4ed231..a87eb1c 100644 > > --- a/wrlib/wraster.h > > +++ b/wrlib/wraster.h > > @@ -461,11 +461,18 @@ void RPutXImage(RContext *context, Drawable d, > > GC gc, RXImage *ximage, > > int src_x, int src_y, int dest_x, int dest_y, > > -- > To unsubscribe, send mail to > wmaker-dev-unsubscr...@lists.windowmaker.org<javascript:;> > . >