From df0d1e30f0bebad61f8d18fee72a1b1a4e6faceb Mon Sep 17 00:00:00 2001 From: Paul Ramsey Date: Fri, 26 Feb 2016 09:51:29 +0000 Subject: [PATCH] #3429, directly call set_handlers for allocator initialization git-svn-id: http://svn.osgeo.org/postgis/trunk@14700 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/rtpostgis.c | 182 ++++++++++++++++++++------------------- 1 file changed, 93 insertions(+), 89 deletions(-) diff --git a/raster/rt_pg/rtpostgis.c b/raster/rt_pg/rtpostgis.c index f222dd1ff..0d954621b 100644 --- a/raster/rt_pg/rtpostgis.c +++ b/raster/rt_pg/rtpostgis.c @@ -153,6 +153,98 @@ void _PG_init(void); #define RT_MSG_MAXLEN 256 + +/* ---------------------------------------------------------------- */ +/* Memory allocation / error reporting hooks */ +/* ---------------------------------------------------------------- */ + +static void * +rt_pg_alloc(size_t size) +{ + void * result; + + POSTGIS_RT_DEBUGF(5, "rt_pgalloc(%ld) called", (long int) size); + + result = palloc(size); + + return result; +} + +static void * +rt_pg_realloc(void *mem, size_t size) +{ + void * result; + + POSTGIS_RT_DEBUGF(5, "rt_pg_realloc(%ld) called", (long int) size); + + if (mem) + result = repalloc(mem, size); + + else + result = palloc(size); + + return result; +} + +static void +rt_pg_free(void *ptr) +{ + POSTGIS_RT_DEBUG(5, "rt_pfree called"); + pfree(ptr); +} + +static void rt_pg_error(const char *fmt, va_list ap) + __attribute__(( format(printf,1,0) )); + +static void +rt_pg_error(const char *fmt, va_list ap) +{ + char errmsg[RT_MSG_MAXLEN+1]; + + vsnprintf (errmsg, RT_MSG_MAXLEN, fmt, ap); + + errmsg[RT_MSG_MAXLEN]='\0'; + ereport(ERROR, (errmsg_internal("%s", errmsg))); +} + +static void rt_pg_notice(const char *fmt, va_list ap) + __attribute__(( format(printf,1,0) )); + +static void +rt_pg_notice(const char *fmt, va_list ap) +{ + char msg[RT_MSG_MAXLEN+1]; + + vsnprintf (msg, RT_MSG_MAXLEN, fmt, ap); + + msg[RT_MSG_MAXLEN]='\0'; + ereport(NOTICE, (errmsg_internal("%s", msg))); +} + +static void rt_pg_debug(const char *fmt, va_list ap) + __attribute__(( format(printf,1,0) )); + +static void +rt_pg_debug(const char *fmt, va_list ap) +{ + char msg[RT_MSG_MAXLEN+1]; + + vsnprintf (msg, RT_MSG_MAXLEN, fmt, ap); + + msg[RT_MSG_MAXLEN]='\0'; + ereport(DEBUG1, (errmsg_internal("%s", msg))); +} + + +void +rt_init_allocators(void) +{ + /* raster callback - install raster handlers */ + rt_set_handlers(rt_pg_alloc, rt_pg_realloc, rt_pg_free, rt_pg_error, + rt_pg_debug, rt_pg_notice); +} + + /* ---------------------------------------------------------------- */ /* PostGIS raster GUCs */ /* ---------------------------------------------------------------- */ @@ -382,7 +474,7 @@ _PG_init(void) { pg_install_lwgeom_handlers(); /* Install rtcore handlers */ - rt_init_allocators(); + rt_set_handlers(rt_pg_alloc, rt_pg_realloc, rt_pg_free, rt_pg_error, rt_pg_debug, rt_pg_notice); /* Define custom GUC variables. */ if ( postgis_guc_find_option("postgis.gdal_datapath") ) @@ -464,93 +556,5 @@ _PG_init(void) { pfree(boot_postgis_gdal_enabled_drivers); } -/* ---------------------------------------------------------------- */ -/* Memory allocation / error reporting hooks */ -/* TODO: reuse the ones in libpgcommon ? */ -/* ---------------------------------------------------------------- */ - -static void * -rt_pg_alloc(size_t size) -{ - void * result; - - POSTGIS_RT_DEBUGF(5, "rt_pgalloc(%ld) called", (long int) size); - result = palloc(size); - - return result; -} - -static void * -rt_pg_realloc(void *mem, size_t size) -{ - void * result; - - POSTGIS_RT_DEBUGF(5, "rt_pg_realloc(%ld) called", (long int) size); - if (mem) - result = repalloc(mem, size); - - else - result = palloc(size); - - return result; -} - -static void -rt_pg_free(void *ptr) -{ - POSTGIS_RT_DEBUG(5, "rt_pfree called"); - pfree(ptr); -} - -static void rt_pg_error(const char *fmt, va_list ap) - __attribute__(( format(printf,1,0) )); - -static void -rt_pg_error(const char *fmt, va_list ap) -{ - char errmsg[RT_MSG_MAXLEN+1]; - - vsnprintf (errmsg, RT_MSG_MAXLEN, fmt, ap); - - errmsg[RT_MSG_MAXLEN]='\0'; - ereport(ERROR, (errmsg_internal("%s", errmsg))); -} - -static void rt_pg_notice(const char *fmt, va_list ap) - __attribute__(( format(printf,1,0) )); - -static void -rt_pg_notice(const char *fmt, va_list ap) -{ - char msg[RT_MSG_MAXLEN+1]; - - vsnprintf (msg, RT_MSG_MAXLEN, fmt, ap); - - msg[RT_MSG_MAXLEN]='\0'; - ereport(NOTICE, (errmsg_internal("%s", msg))); -} - -static void rt_pg_debug(const char *fmt, va_list ap) - __attribute__(( format(printf,1,0) )); - -static void -rt_pg_debug(const char *fmt, va_list ap) -{ - char msg[RT_MSG_MAXLEN+1]; - - vsnprintf (msg, RT_MSG_MAXLEN, fmt, ap); - - msg[RT_MSG_MAXLEN]='\0'; - ereport(DEBUG1, (errmsg_internal("%s", msg))); -} - - -void -rt_init_allocators(void) -{ - /* raster callback - install raster handlers */ - rt_set_handlers(rt_pg_alloc, rt_pg_realloc, rt_pg_free, rt_pg_error, - rt_pg_debug, rt_pg_notice); -} -- 2.40.0