[exim-cvs] Use project memory-management for json lookup

Startseite
Nachricht löschen
Nachricht beantworten
Autor: Exim Git Commits Mailing List
Datum:  
To: exim-cvs
Betreff: [exim-cvs] Use project memory-management for json lookup
Gitweb: https://git.exim.org/exim.git/commitdiff/6db8b72c861b99114bdcb9188abfe20bc77e67d2
Commit:     6db8b72c861b99114bdcb9188abfe20bc77e67d2
Parent:     b13354a7c428fdb2286d2227fdad5378a1ee9426
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Thu Jan 10 19:17:57 2019 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Thu Jan 10 19:17:57 2019 +0000


    Use project memory-management for json lookup
---
 src/src/lookups/json.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)


diff --git a/src/src/lookups/json.c b/src/src/lookups/json.c
index 5fe1f1c..0b28b73 100644
--- a/src/src/lookups/json.c
+++ b/src/src/lookups/json.c
@@ -11,6 +11,26 @@



+/* All use of allocations will be done against the POOL_SEARCH memory,
+which is freed once by search_tidyup(). Make the free call a dummy.
+This burns some 300kB in handling a 37kB JSON file, for the benefit of
+a fast free.  The alternative of staying with malloc is nearly as bad,
+eyeballing the activity there are 20% the number of free vs. alloc
+calls (before the big bunch at the end). */
+
+static void *
+json_malloc(size_t nbytes)
+{
+void * p = store_get((int)nbytes);
+/* debug_printf("%s %d: %p\n", __FUNCTION__, (int)nbytes, p); */
+return p;
+}
+static void
+json_free(void * p)
+{
+/* debug_printf("%s: %p\n", __FUNCTION__, p); */
+}
+
 /*************************************************
 *              Open entry point                  *
 *************************************************/
@@ -20,8 +40,11 @@
 static void *
 json_open(uschar *filename, uschar **errmsg)
 {
-FILE *f = Ufopen(filename, "rb");
-if (f == NULL)
+FILE * f;
+
+json_set_alloc_funcs(json_malloc, json_free);
+
+if (!(f = Ufopen(filename, "rb")))
   {
   int save_errno = errno;
   *errmsg = string_open_failed(errno, "%s for json search", filename);