X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_open.c;h=c0e483591c8c9f8d76eff1070501a91822966f83;hp=b6f3abb52d1234fad9e7540c449a239dd533903f;hb=7bd35b8d099910071a57c66687f6ef79c5df9a5c;hpb=a4c8bc0c3fe53c713819358f506aa5d24bae5754 diff --git a/src/rrd_open.c b/src/rrd_open.c index b6f3abb..c0e4835 100644 --- a/src/rrd_open.c +++ b/src/rrd_open.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.3rc4 Copyright by Tobi Oetiker, 1997-2008 + * RRDtool 1.3rc7 Copyright by Tobi Oetiker, 1997-2008 ***************************************************************************** * rrd_open.c Open an RRD File ***************************************************************************** @@ -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)); +#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(