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]

Reply via email to