]> mj.ucw.cz Git - libucw.git/commitdiff
Conf: Introduced cf_set_journalling()
authorMartin Mares <mj@ucw.cz>
Sat, 28 Apr 2012 21:38:22 +0000 (23:38 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 29 Apr 2012 11:57:30 +0000 (13:57 +0200)
ucw/conf-internal.h
ucw/conf-intr.c
ucw/conf-journal.c
ucw/conf.h

index a47ab46678303ac2f5b03121be93d9f789eb2e96..bab5383740ec4f7f01d493532ec677007669e744 100644 (file)
@@ -42,19 +42,19 @@ struct dirty_section {
 struct cf_context {
   struct mempool *pool;
   int is_active;
-  int need_journal;
   int def_loaded;
   struct cf_parser_state *parser;
   uns everything_committed;            // after the 1st load, this flag is set on
   uns postpone_commit;                 // used internally by cf_getopt()
   uns other_options;
-  clist conf_entries;
+  clist conf_entries;                  // files/strings to reload
   struct old_pools *pools;
   struct cf_journal_item *journal;
-  struct item_stack stack[MAX_STACK_SIZE];
+  int need_journal;
+  struct item_stack stack[MAX_STACK_SIZE];     // interpreter stack
   uns stack_level;
-  uns initialized;
   struct cf_section sections;          // root section
+  uns sections_initialized;
   dirtsec_t dirty;                     // dirty sections
   uns dirties;
 };
index 57192e9205e1ab58038ffb3fd8d648f709608a89..f42265102593beda40bd62136f0983cd3c831784 100644 (file)
@@ -635,7 +635,7 @@ cf_modify_item(struct cf_item *item, enum cf_operation op, int number, char **pa
 void
 cf_init_stack(struct cf_context *cc)
 {
-  if (!cc->initialized++) {
+  if (!cc->sections_initialized++) {
     cc->sections.flags |= SEC_FLAG_UNKNOWN;
     cc->sections.size = 0;                     // size of allocated array used to be stored here
     cf_init_section(NULL, &cc->sections, NULL, 0);
index 75af51ad69d3021743cf796945901c9663a8e818..6412328acaf9017f32f545167e747d52d463554e 100644 (file)
@@ -28,6 +28,14 @@ struct cf_journal_item {
   byte copy[0];
 };
 
+void
+cf_set_journalling(int enable)
+{
+  struct cf_context *cc = cf_get_context();
+  ASSERT(!cc->journal);
+  cc->need_journal = enable;
+}
+
 void
 cf_journal_block(void *ptr, uns len)
 {
index 82bc852f7ca9093f8d8f96664e394d3b1bfa5771..07d83e7b479db72b27c225eef6cb69ec5fa13a4f 100644 (file)
@@ -366,7 +366,12 @@ char *cf_printf(const char *fmt, ...) FORMAT_CHECK(printf,1,2); /** printf() int
  *
  * For error recovery when <<reload,reloading configuration>>.
  ***/
-extern uns cf_need_journal;    /** Is the journal needed? If you do not reload configuration, you set this to 0 and gain a little more performance and free memory. **/
+/**
+ * By default, the configuration mechanism remembers all changes in a journal,
+ * so that the configuration can be rolled back or reloaded. This function
+ * can be used to disable journalling, which saves some memory.
+ **/
+void cf_set_journalling(int enable);
 /**
  * When a block of memory is about to be changed, put the old value
  * into journal with this function. You need to call it from a <<hooks,commit hook>>