Avoid building routines calling other not incuded in utilities link stage
[exim.git] / src / src / functions.h
index 6d16e69c27e915e32bf9a272d6875f67125eebea..f1e5b466e0f8dcae5a7db7d72f8d0da217fd171a 100644 (file)
@@ -966,20 +966,34 @@ g->s = s;
 }
 
 
+# ifndef COMPILE_UTILITY
 /******************************************************************************/
+/* Use store_malloc for DNSA structs, and explicit frees. Using the same pool
+for them as the strings we proceed to copy from them meant they could not be
+released, hence blowing 64k for every DNS lookup. That mounted up. With malloc
+we do have to take care over marking tainted all copied strings.  A separate pool
+could be used and would handle that implicitly. */
 
 #define store_get_dns_answer() store_get_dns_answer_trc(CUS __FUNCTION__, __LINE__)
 
 static inline dns_answer *
 store_get_dns_answer_trc(const uschar * func, unsigned line)
 {
-return store_get_3(sizeof(dns_answer), TRUE, CCS func, line);  /* use tainted mem */
+/* return store_get_3(sizeof(dns_answer), TRUE, CCS func, line);   use tainted mem */
+return store_malloc_3(sizeof(dns_answer), CCS func, line);
+}
+
+#define store_free_dns_answer(dnsa) store_free_dns_answer_trc(dnsa, CUS __FUNCTION__, __LINE__)
+
+static inline void
+store_free_dns_answer_trc(dns_answer * dnsa, const uschar * func, unsigned line)
+{
+store_free_3(dnsa, CCS func, line);
 }
 
 /******************************************************************************/
 /* Routines with knowledge of spool layout */
 
-# ifndef COMPILE_UTILITY
 static inline void
 spool_pname_buf(uschar * buf, int len)
 {