Fix for debian bug 498183 ... never *advise after the end of the
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 18 Sep 2008 13:30:48 +0000 (13:30 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 18 Sep 2008 13:30:48 +0000 (13:30 +0000)
file. On sparc this causes a segfault. Thanks to Sebastian Harl and Jurij Smakov for finding this.

git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@1512 a5681a0c-68f1-0310-ab6d-d61299d08faa

src/rrd_open.c

index 51b621f..af91c7b 100644 (file)
@@ -363,14 +363,19 @@ void rrd_dontneed(
             rrd->rra_def[i].row_cnt * rrd->stat_head->ds_cnt *
             sizeof(rrd_value_t);
     }
+
+    if (dontneed_start < rrd_file->file_len) {
 #ifdef USE_MADVISE
-    madvise(rrd_file->file_start + dontneed_start,
-            rrd_file->file_len - dontneed_start, MADV_DONTNEED);
+           madvise(rrd_file->file_start + dontneed_start,
+                   rrd_file->file_len - dontneed_start, MADV_DONTNEED);
 #endif
 #ifdef HAVE_POSIX_FADVISE
-    posix_fadvise(rrd_file->fd, dontneed_start,
-                  rrd_file->file_len - dontneed_start, POSIX_FADV_DONTNEED);
+           posix_fadvise(rrd_file->fd, dontneed_start,
+                         rrd_file->file_len - dontneed_start,
+                         POSIX_FADV_DONTNEED);
 #endif
+    }
+
 #if defined DEBUG && DEBUG > 1
     mincore_print(rrd_file, "after");
 #endif