From 1b2e8a6491029912cef34e24d6ae4e28083d71ef Mon Sep 17 00:00:00 2001 From: David Maciejak Date: Thu, 8 May 2014 23:57:03 +0200 Subject: [PATCH] wrlib: Added clean-up of library internals in 'RShutdown' The library uses internally a cache of tables to convert image to different depths, there is now an internal function 'r_destroy_conversion_tables' to free them. --- wrlib/Makefile.am | 1 + wrlib/convert.c | 34 ++++++++++++++++++++++++++++++++++ wrlib/convert.h | 39 +++++++++++++++++++++++++++++++++++++++ wrlib/misc.c | 2 ++ 4 files changed, 76 insertions(+) create mode 100644 wrlib/convert.h diff --git a/wrlib/Makefile.am b/wrlib/Makefile.am index d88ecc6c..3f229c53 100644 --- a/wrlib/Makefile.am +++ b/wrlib/Makefile.am @@ -28,6 +28,7 @@ libwraster_la_SOURCES = \ save.c \ gradient.c \ xpixmap.c \ + convert.h \ convert.c \ context.c \ misc.c \ diff --git a/wrlib/convert.c b/wrlib/convert.c index f3c9a49d..95a14d45 100644 --- a/wrlib/convert.c +++ b/wrlib/convert.c @@ -34,6 +34,8 @@ #include #include "wraster.h" +#include "convert.h" + #ifdef USE_XSHM extern Pixmap R_CreateXImageMappedPixmap(RContext * context, RXImage * ximage); @@ -62,6 +64,38 @@ typedef struct RStdConversionTable { static RConversionTable *conversionTable = NULL; static RStdConversionTable *stdConversionTable = NULL; +static void release_conversion_table(void) +{ + RConversionTable *tmp = conversionTable; + + while (tmp) { + RConversionTable *tmp_to_delete = tmp; + + tmp = tmp->next; + free(tmp_to_delete); + } + conversionTable = NULL; +} + +static void release_std_conversion_table(void) +{ + RStdConversionTable *tmp = stdConversionTable; + + while (tmp) { + RStdConversionTable *tmp_to_delete = tmp; + + tmp = tmp->next; + free(tmp_to_delete); + } + stdConversionTable = NULL; +} + +void r_destroy_conversion_tables(void) +{ + release_conversion_table(); + release_std_conversion_table(); +} + static unsigned short *computeTable(unsigned short mask) { RConversionTable *tmp = conversionTable; diff --git a/wrlib/convert.h b/wrlib/convert.h new file mode 100644 index 00000000..a3045e01 --- /dev/null +++ b/wrlib/convert.h @@ -0,0 +1,39 @@ +/* + * Raster graphics library + * + * Copyright (c) 2014 Window Maker Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +/* + * Functions to convert images to given color depths + * + * The functions here are for WRaster library's internal use only, + * Please use functions in 'wraster.h' in applications + */ + +#ifndef WRASTER_CONVERT_H +#define WRASTER_CONVERT_H + + +/* + * Function for to release internal Conversion Tables + */ +void r_destroy_conversion_tables(void); + + +#endif diff --git a/wrlib/misc.c b/wrlib/misc.c index 53d5aaae..615777e1 100644 --- a/wrlib/misc.c +++ b/wrlib/misc.c @@ -27,6 +27,7 @@ #include "wraster.h" #include "imgformat.h" +#include "convert.h" void RBevelImage(RImage * image, int bevel_type) @@ -252,4 +253,5 @@ void RShutdown(void) RReleaseMagick(); #endif RReleaseCache(); + r_destroy_conversion_tables(); }