]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Update drift file at most once per hour
authorMiroslav Lichvar <mlichvar@redhat.com>
Thu, 15 Apr 2010 13:48:31 +0000 (15:48 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Tue, 27 Apr 2010 12:35:27 +0000 (14:35 +0200)
Instead of writing to the file on every reference update, update it
on first update, on exit and otherwise only once per hour.

reference.c

index df31420bfe39b89b8964103da58dce65929087eb..19cb8adbd7bab82744a2e9ca647e055ee4a2a7ea 100644 (file)
@@ -76,6 +76,7 @@ static char *mail_change_user;
 
 /* Filename of the drift file. */
 static char *drift_file=NULL;
+static double drift_file_age;
 
 static void update_drift_file(double, double);
 
@@ -155,7 +156,7 @@ REF_Initialise(void)
           drift_file);
     }
 
-    update_drift_file(our_frequency_ppm,our_skew);
+    drift_file_age = 0.0;
   }
     
   LCL_SetAbsoluteFrequency(our_frequency_ppm);
@@ -201,6 +202,10 @@ REF_Finalise(void)
     LCL_SetLeap(0);
   }
 
+  if (drift_file && drift_file_age > 0.0) {
+    update_drift_file(LCL_ReadAbsoluteFrequency(), our_skew);
+  }
+
   Free(fb_drifts);
 
   initialised = 0;
@@ -531,6 +536,8 @@ REF_SetReference(int stratum,
 
   double abs_freq_ppm;
 
+  double update_interval;
+
   assert(initialised);
 
   /* Avoid getting NaNs */
@@ -630,21 +637,25 @@ REF_SetReference(int stratum,
             1.0e6*our_skew,
             our_offset);
 
+  UTI_DiffTimevalsToDouble(&update_interval, ref_time, &last_ref_update);
+
   if (drift_file) {
-    update_drift_file(abs_freq_ppm, our_skew);
+    /* Update drift file at most once per hour */
+    drift_file_age += update_interval;
+    if (drift_file_age < 0.0 || drift_file_age > 3600.0) {
+      update_drift_file(abs_freq_ppm, our_skew);
+      drift_file_age = 0.0;
+    }
   }
 
   /* Update fallback drifts */
   if (fb_drifts) {
-    double update_interval;
-
-    UTI_DiffTimevalsToDouble(&update_interval, ref_time, &last_ref_update);
-
     update_fb_drifts(abs_freq_ppm, update_interval);
-    last_ref_update = *ref_time;
-    last_ref_update_interval = update_interval;
   }
 
+  last_ref_update = *ref_time;
+  last_ref_update_interval = update_interval;
+
   /* And now set the freq and offset to zero */
   our_frequency = 0.0;
   our_offset = 0.0;