Changeset: 7d5bbe75d472 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7d5bbe75d472
Modified Files:
gdk/gdk_heap.c
gdk/gdk_private.h
Branch: default
Log Message:
Reduce number of times files are opened and closed.
diffs (46 lines):
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -49,6 +49,7 @@
#include "gdk_private.h"
#include "mutils.h"
+__attribute__((__access__(read_write, 2)))
static void *
HEAPcreatefile(int farmid, size_t *maxsz, const char *fn)
{
@@ -64,10 +65,19 @@ HEAPcreatefile(int farmid, size_t *maxsz
fn = path;
}
/* round up to multiple of GDK_mmap_pagesize */
- fd = GDKfdlocate(NOFARM, fn, "wb", NULL);
+ fd = GDKfdlocate(NOFARM, fn, "w+b", NULL);
if (fd >= 0) {
+ size_t size = (*maxsz + GDK_mmap_pagesize - 1) &
~(GDK_mmap_pagesize - 1);
+ if (size == 0)
+ size = GDK_mmap_pagesize;
+ if (GDKextendf(fd, size, fn) != GDK_SUCCEED) {
+ close(fd);
+ return NULL;
+ }
close(fd);
- base = GDKload(NOFARM, fn, NULL, *maxsz, maxsz, STORE_MMAP);
+ base = GDKmmap(fn, MMAP_READ | MMAP_WRITE, size);
+ if (base != NULL)
+ *maxsz = size;
}
return base;
}
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -148,7 +148,8 @@ FILE *GDKfileopen(int farmid, const char
__attribute__((__malloc__))
__attribute__((__malloc__(fclose, 1)));
char *GDKload(int farmid, const char *nme, const char *ext, size_t size,
size_t *maxsize, storage_t mode)
- __attribute__((__visibility__("hidden")));
+ __attribute__((__visibility__("hidden")))
+ __attribute__((__access__(read_write, 5)));
gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, const char
*ext1, const char *dir2, const char *nme2, const char *ext2, bool report)
__attribute__((__warn_unused_result__))
__attribute__((__visibility__("hidden")));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]