[postgis-tickets] r14702 - Change allocators to init with direct call instead of lazy load (#3429)

Paul Ramsey pramsey at cleverelephant.ca
Fri Feb 26 02:02:57 PST 2016


Author: pramsey
Date: 2016-02-26 02:02:57 -0800 (Fri, 26 Feb 2016)
New Revision: 14702

Modified:
   branches/2.2/raster/rt_core/rt_context.c
   branches/2.2/raster/rt_pg/rtpostgis.c
Log:
Change allocators to init with direct call instead of lazy load (#3429)


Modified: branches/2.2/raster/rt_core/rt_context.c
===================================================================
--- branches/2.2/raster/rt_core/rt_context.c	2016-02-26 09:53:09 UTC (rev 14701)
+++ branches/2.2/raster/rt_core/rt_context.c	2016-02-26 10:02:57 UTC (rev 14702)
@@ -36,14 +36,6 @@
 * rt_context
 ******************************************************************************/
 
-/* Functions definitions */
-void * init_rt_allocator(size_t size);
-void * init_rt_reallocator(void * mem, size_t size);
-void init_rt_deallocator(void * mem);
-void init_rt_errorreporter(const char * fmt, va_list ap);
-void init_rt_warnreporter(const char * fmt, va_list ap);
-void init_rt_inforeporter(const char * fmt, va_list ap);
-
 /*
  * Default allocators
  *
@@ -124,12 +116,12 @@
 
 /* Static variable, to be used for all rt_core functions */
 static struct rt_context_t ctx_t = {
-    .alloc = init_rt_allocator,
-    .realloc = init_rt_reallocator,
-    .dealloc = init_rt_deallocator,
-    .err = init_rt_errorreporter,
-    .warn = init_rt_warnreporter,
-    .info = init_rt_inforeporter
+    .alloc = default_rt_allocator,
+    .realloc = default_rt_reallocator,
+    .dealloc = default_rt_deallocator,
+    .err = default_rt_error_handler,
+    .warn = default_rt_warning_handler,
+    .info = default_rt_info_handler
 };
 
 
@@ -170,67 +162,7 @@
     ctx_t.warn = warning_handler;
 }
 
-/**
- * Initialisation allocators
- *
- * These are used the first time any of the allocators are called to enable
- * executables/libraries that link into raster to be able to set up their own
- * allocators. This is mainly useful for older PostgreSQL versions that don't
- * have functions that are called upon startup.
- **/
-void *
-init_rt_allocator(size_t size)
-{
-    rt_init_allocators();
 
-    return ctx_t.alloc(size);
-}
-
-void
-init_rt_deallocator(void *mem)
-{
-    rt_init_allocators();
-
-    ctx_t.dealloc(mem);
-}
-
-
-void *
-init_rt_reallocator(void *mem, size_t size)
-{
-    rt_init_allocators();
-
-    return ctx_t.realloc(mem, size);
-}
-
-void
-init_rt_inforeporter(const char *fmt, va_list ap)
-{
-    rt_init_allocators();
-
-    (*ctx_t.info)(fmt, ap);
-}
-
-void
-init_rt_warnreporter(const char *fmt, va_list ap)
-{
-    rt_init_allocators();
-
-    (*ctx_t.warn)(fmt, ap);
-}
-
-
-void
-init_rt_errorreporter(const char *fmt, va_list ap)
-{
-    rt_init_allocators();
-
-    (*ctx_t.err)(fmt, ap);
-
-}
-
-
-
 /**
  * Raster core memory management functions.
  *

Modified: branches/2.2/raster/rt_pg/rtpostgis.c
===================================================================
--- branches/2.2/raster/rt_pg/rtpostgis.c	2016-02-26 09:53:09 UTC (rev 14701)
+++ branches/2.2/raster/rt_pg/rtpostgis.c	2016-02-26 10:02:57 UTC (rev 14702)
@@ -153,7 +153,90 @@
 
 #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)));
+}
+
+
+/* ---------------------------------------------------------------- */
 /*  PostGIS raster GUCs                                             */
 /* ---------------------------------------------------------------- */
 
@@ -381,7 +464,8 @@
 	/* Install liblwgeom handlers */
 	pg_install_lwgeom_handlers();
 
-	/* TODO: Install raster callbacks (see rt_init_allocators)??? */
+	/* Install rtcore handlers */
+	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. */
 
@@ -433,94 +517,3 @@
 	/* free memory allocations */
 	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);
-}



More information about the postgis-tickets mailing list