Changeset: 59c105f4830a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/59c105f4830a
Modified Files:
gdk/gdk_heap.c
Branch: Jan2022
Log Message:
Truncate too large heaps based on actual file size, not calculated size.
diffs (39 lines):
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -772,21 +772,23 @@ HEAPload_intern(Heap *h, const char *nme
if (trunc) {
/* round up mmap heap sizes to GDK_mmap_pagesize
* segments, also add some slack */
- size_t truncsize = ((size_t) (h->free * 1.05) +
GDK_mmap_pagesize - 1) & ~(GDK_mmap_pagesize - 1);
int fd;
- if (truncsize == 0)
- truncsize = GDK_mmap_pagesize; /* minimum of one page */
- if (truncsize < h->size &&
- (fd = GDKfdlocate(h->farmid, nme, "mrb+", ext)) >= 0) {
- ret = ftruncate(fd, truncsize);
- TRC_DEBUG(HEAP,
- "ftruncate(file=%s.%s, size=%zu) = %d\n",
- nme, ext, truncsize, ret);
+ if (minsize == 0)
+ minsize = GDK_mmap_pagesize; /* minimum of one page */
+ if ((fd = GDKfdlocate(h->farmid, nme, "rb+", ext)) >= 0) {
+ struct stat stb;
+ if (fstat(fd, &stb) == 0 &&
+ stb.st_size > (off_t) minsize) {
+ ret = ftruncate(fd, minsize);
+ TRC_DEBUG(HEAP,
+ "ftruncate(file=%s.%s, size=%zu) =
%d\n",
+ nme, ext, minsize, ret);
+ if (ret == 0) {
+ h->size = minsize;
+ }
+ }
close(fd);
- if (ret == 0) {
- h->size = truncsize;
- }
}
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]