Changeset: 3b88af94c574 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3b88af94c574
Modified Files:
        gdk/gdk_heap.c
Branch: Feb2013
Log Message:

Fix for one of the problems in bug 3323.
Allocate a heap from the heap cache when extending a heap from memory
to memory map.


diffs (34 lines):

diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -409,7 +409,7 @@ HEAPextend(Heap *h, size_t size)
                if (!must_mmap) {
                        void *p = h->base;
                        h->newstorage = h->storage = STORE_MEM;
-                       h->base = (char *) GDKreallocmax(h->base, size, 
&h->maxsize, 0);
+                       h->base = GDKreallocmax(h->base, size, &h->maxsize, 0);
                        HEAPDEBUG fprintf(stderr, "#HEAPextend: extending 
malloced heap " SZFMT " " SZFMT " " PTRFMT " " PTRFMT "\n", size, h->maxsize, 
PTRFMTCAST p, PTRFMTCAST h->base);
                        if (h->base)
                                return 0;
@@ -430,6 +430,21 @@ HEAPextend(Heap *h, size_t size)
                        if (fd >= 0) {
                                existing = 1;
                                close(fd);
+                       } else {
+                               /* no pre-existing heap file, attempt
+                                * to use a file from the cache (or
+                                * create a new one) */
+                               h->filename = GDKmalloc(strlen(nme) + 
strlen(ext) + 2);
+                               if (h->filename == NULL)
+                                       goto failed;
+                               sprintf(h->filename, "%s.%s", nme, ext);
+                               h->base = HEAPcacheFind(&h->maxsize, 
h->filename, STORE_MMAP);
+                               if (h->base) {
+                                       h->newstorage = h->storage = STORE_MMAP;
+                                       memcpy(h->base, bak.base, bak.free);
+                                       HEAPfree(&bak);
+                                       return 0;
+                               }
                        }
                        fd = GDKfdlocate(nme, "wb", ext);
                        if (fd >= 0) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to