OpenSSL: tidy DH and ECDH param setup
[exim.git] / src / src / exim.c
index a17dd92adc52a12a00f2539a9386e34567278121..42db457c0e80d6c74462423d5aa26437168148a6 100644 (file)
@@ -40,20 +40,7 @@ extern void init_lookup_list(void);
 for store allocation via Exim's store manager. The normal calls are actually
 macros that pass over location information to make tracing easier. These
 functions just interface to the standard macro calls. A good compiler will
-optimize out the tail recursion and so not make them too expensive. There
-are two sets of functions; one for use when we want to retain the compiled
-regular expression for a long time; the other for short-term use. */
-
-static void *
-function_store_get(PCRE2_SIZE size, void * tag)
-{
-/* For now, regard all RE results as potentially tainted.  We might need
-more intelligence on this point. */
-return store_get((int)size, TRUE);
-}
-
-static void
-function_dummy_free(void * block, void * tag) {}
+optimize out the tail recursion and so not make them too expensive. */
 
 static void *
 function_store_malloc(PCRE2_SIZE size, void * tag)
@@ -64,7 +51,8 @@ return store_malloc((int)size);
 static void
 function_store_free(void * block, void * tag)
 {
-store_free(block);
+/* At least some version of pcre2 pass a null pointer */
+if (block) store_free(block);
 }
 
 
@@ -4600,7 +4588,12 @@ needed in transports so we lost the optimisation. */
   store_pool = POOL_CONFIG;
   readconf_rest();
   store_pool = old_pool;
-  store_writeprotect(POOL_CONFIG);
+
+  /* -be can add macro definitions, needing to link to the macro structure
+  chain.  Otherwise, make the memory used for config data readonly. */
+
+  if (!expansion_test)
+    store_writeprotect(POOL_CONFIG);
 
 #ifdef MEASURE_TIMING
   report_time_since(&t0, US"readconf_rest (delta)");
@@ -5742,13 +5735,8 @@ for (BOOL more = TRUE; more; )
     the file copy. */
 
     if (!receive_timeout)
-      {
-      struct timeval t = { .tv_sec = 30*60, .tv_usec = 0 };    /* 30 minutes */
-      fd_set r;
-
-      FD_ZERO(&r); FD_SET(0, &r);
-      if (select(1, &r, NULL, NULL, &t) == 0) mainlog_close();
-      }
+      if (poll_one_fd(0, POLLIN, 30*60*1000) == 0)     /* 30 minutes */
+       mainlog_close();
 
     /* Read the data for the message. If filter_test is not FTEST_NONE, this
     will just read the headers for the message, and not write anything onto the