cfgfile: cache the generated configuration file
authorFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 7 Apr 2016 17:30:40 +0000 (19:30 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Thu, 7 Apr 2016 19:31:37 +0000 (21:31 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
src/cfgparser/cfgfile_gen.c
src/main.c
src/olsr_cfg.h

index f61e52c..c0c901e 100644 (file)
@@ -284,7 +284,25 @@ static void olsrd_write_if_autobuf(struct autobuf *out, struct olsrd_config *cnf
   abuf_puts(out, "}\n");
 }
 
+static struct autobuf config_cache;
+
+void olsrd_cfgfile_init(void) {
+  abuf_init(&config_cache, AUTOBUFCHUNK);
+}
+
+void olsrd_cfgfile_cleanup(void) {
+  abuf_free(&config_cache);
+}
+
 void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf) {
+  if (!config_cache.len) {
+    olsrd_write_cnf_autobuf_uncached(&config_cache, cnf);
+  }
+
+  abuf_concat(out, &config_cache);
+}
+
+void olsrd_write_cnf_autobuf_uncached(struct autobuf *out, struct olsrd_config *cnf) {
   struct ip_prefix_list *hna = cnf->hna_entries;
   struct olsr_if *interf = cnf->interfaces;
   struct plugin_entry *plugins = cnf->plugins;
index e78a585..8c9edc9 100644 (file)
@@ -260,6 +260,8 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
 
   olsr_destroy_parser();
 
+  olsrd_cfgfile_cleanup();
+
   OLSR_PRINTF(1, "Closing sockets...\n");
 
   /* front-end IPC socket */
@@ -492,6 +494,8 @@ int main(int argc, char *argv[]) {
   /* Setup derived configuration */
   set_derived_cnf(olsr_cnf);
 
+  olsrd_cfgfile_init();
+
   /* Print configuration */
   if (olsr_cnf->debug_level > 1) {
     olsrd_print_cnf(olsr_cnf);
index 497e477..c67b437 100644 (file)
@@ -428,8 +428,14 @@ extern "C" {
 
   void olsrd_print_cnf(struct olsrd_config *);
 
+  void olsrd_cfgfile_init(void);
+
+  void olsrd_cfgfile_cleanup(void);
+
   void olsrd_write_cnf_autobuf(struct autobuf *out, struct olsrd_config *cnf);
 
+  void olsrd_write_cnf_autobuf_uncached(struct autobuf *out, struct olsrd_config *cnf);
+
   int olsrd_write_cnf(struct olsrd_config *, const char *);
 
   struct if_config_options *get_default_if_config(void);