Code

Imported upstream version 1.3rc6.
[pkg-rrdtool.git] / src / rrd_open.c
index 1f3f4394d2e7445657d4f411256093e937231f1a..a03e5d3e6049d2f9dd16de1b19c7bc776c8e96b2 100644 (file)
@@ -1,9 +1,9 @@
 /*****************************************************************************
- * RRDtool 1.3rc4  Copyright by Tobi Oetiker, 1997-2008
+ * RRDtool 1.3rc6  Copyright by Tobi Oetiker, 1997-2008
  *****************************************************************************
  * rrd_open.c  Open an RRD File
  *****************************************************************************
- * $Id: rrd_open.c 1366 2008-05-18 13:06:44Z oetiker $
+ * $Id: rrd_open.c 1380 2008-05-26 08:56:58Z oetiker $
  *****************************************************************************/
 
 #include "rrd_tool.h"
@@ -226,12 +226,14 @@ rrd_file_t *rrd_open(
             rrd_set_error("live_head_t malloc");
             goto out_close;
         }
-#ifdef HAVE_MMAP
-        memmove(&rrd->live_head->last_up, data + offset, sizeof(long));
-        offset += sizeof(long);
-#else
-        offset += read(rrd_file->fd, &rrd->live_head->last_up, sizeof(long));
-#endif
+
+#if defined USE_MADVISE
+        /* the live_head will be needed soonish, so hint accordingly */
+        madvise(data + PAGE_START(offset),
+                sizeof(time_t), MADV_WILLNEED);
+#endif        
+        __rrd_read(rrd->legacy_last_up,time_t,1);
+        rrd->live_head->last_up = *rrd->legacy_last_up;
         rrd->live_head->last_up_usec = 0;
     } else {
 #if defined USE_MADVISE
@@ -512,6 +514,7 @@ void rrd_init(
     rrd->ds_def = NULL;
     rrd->rra_def = NULL;
     rrd->live_head = NULL;
+    rrd->legacy_last_up = NULL;
     rrd->rra_ptr = NULL;
     rrd->pdp_prep = NULL;
     rrd->cdp_prep = NULL;
@@ -522,9 +525,12 @@ void rrd_init(
 /* free RRD header data.  */
 
 #ifdef HAVE_MMAP
-inline void rrd_free(
-    rrd_t UNUSED(*rrd))
+void rrd_free(
+    rrd_t *rrd)
 {
+    if (rrd->legacy_last_up){ /* this gets set for version < 3 only */
+        free(rrd->live_head);  
+    }
 }
 #else
 void rrd_free(