summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2019-07-06 22:17:04 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2019-08-02 17:56:17 +0100
commit00f1386065b4ab2aed12facd883ebd324c8c66d5 (patch)
tree2b71bf36eb0240c9358fa28f12c245dd6706f13a /src
parentc9f1be94cc304f0343c93b66efa41a747d307fb1 (diff)
preallocate store for config
Diffstat (limited to 'src')
-rw-r--r--src/src/readconf.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/src/readconf.c b/src/src/readconf.c
index d13d05142..f55c1da34 100644
--- a/src/src/readconf.c
+++ b/src/src/readconf.c
@@ -3341,6 +3341,19 @@ if (f.trusted_config && Ustrcmp(filename, US"/dev/null"))
}
}
+/* Do a dummy store-allocation of a size related to the (toplevel) file size.
+This assumes we will need this much storage to handle all the allocations
+during startup; it won't help when .include is being used. When it does, it
+will cut down on the number of store blocks (and malloc calls, and sbrk
+syscalls). It also assume we're on the relevant pool. */
+
+if (statbuf.st_size > 8192)
+ {
+ rmark r = store_mark();
+ store_get((int)statbuf.st_size, FALSE);
+ store_reset(r);
+ }
+
/* Process the main configuration settings. They all begin with a lower case
letter. If we see something starting with an upper case letter, it is taken as
a macro definition. */