Changeset: 6e17d7e3fd20 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6e17d7e3fd20
Modified Files:
        gdk/gdk_heap.c
        gdk/gdk_posix.c
        gdk/gdk_private.h
Branch: default
Log Message:

Merge with Feb2013 branch.


diffs (218 lines):

diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -179,7 +179,7 @@ HEAPcacheFind(size_t *maxsz, char *fn, s
                        long_str fn;
 
                        GDKfilepath(fn, HCDIR, e->fn, NULL);
-                       base = MT_mremap(fn, MMAP_READ | MMAP_WRITE, e->base, 
e->maxsz, size);
+                       base = MT_mremap(fn, MMAP_READ | MMAP_WRITE, e->base, 
e->maxsz, &size);
                        if (base == NULL) {
                                /* extending may have failed */
                                e = NULL;
@@ -366,7 +366,7 @@ HEAPextend(Heap *h, size_t size)
                              h->storage == STORE_PRIV ?
                                MMAP_COPY | MMAP_READ | MMAP_WRITE :
                                MMAP_READ | MMAP_WRITE,
-                             h->base, h->size, size);
+                             h->base, h->size, &size);
                if (p) {
                        h->size = size;
                        h->base = p;
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -399,7 +399,7 @@ MT_munmap(void *p, size_t len)
  * in case of failure, the old address is still mapped and NULL is returned.
  */
 void *
-MT_mremap(const char *path, int mode, void *old_address, size_t old_size, 
size_t new_size)
+MT_mremap(const char *path, int mode, void *old_address, size_t old_size, 
size_t *new_size)
 {
        void *p;
        int fd = -1;
@@ -409,22 +409,22 @@ MT_mremap(const char *path, int mode, vo
        /* doesn't make sense for us to extend read-only memory map */
        assert(mode & MMAP_WRITABLE);
 
-       if (new_size < old_size) {
+       if (*new_size < old_size) {
                /* shrink */
-               if (munmap((char *) old_address + new_size,
-                          old_size - new_size) < 0)
+               if (munmap((char *) old_address + *new_size,
+                          old_size - *new_size) < 0)
                        return NULL;
-               if (truncate(path, (off_t) new_size) < 0)
+               if (truncate(path, (off_t) *new_size) < 0)
                        fprintf(stderr, "#MT_mremap(%s): truncate failed\n", 
path);
 #ifdef MMAP_DEBUG
-               fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
shrinking\n", path?path:"NULL", PTRFMTCAST old_address, old_size, new_size);
+               fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
shrinking\n", path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
 #endif
                return old_address;
        }
-       if (new_size == old_size) {
+       if (*new_size == old_size) {
                /* do nothing */
 #ifdef MMAP_DEBUG
-               fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
unchanged\n", path?path:"NULL", PTRFMTCAST old_address, old_size, new_size);
+               fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
unchanged\n", path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
 #endif
                return old_address;
        }
@@ -434,16 +434,16 @@ MT_mremap(const char *path, int mode, vo
 
                if ((fd = open(path, O_RDWR)) < 0)
                        return NULL;
-               if (GDKextendf(fd, new_size) < 0) {
+               if (GDKextendf(fd, *new_size) < 0) {
                        close(fd);
                        return NULL;
                }
 #ifdef HAVE_MREMAP
                /* on Linux it's easy */
-               p = mremap(old_address, old_size, new_size, MREMAP_MAYMOVE);
+               p = mremap(old_address, old_size, *new_size, MREMAP_MAYMOVE);
 #else
                /* try to map extension at end of current map */
-               p = mmap((char *) old_address + old_size, new_size - old_size,
+               p = mmap((char *) old_address + old_size, *new_size - old_size,
                         prot, flags, fd, old_size);
                /* if it failed, there is no point trying a full mmap:
                 * that too won't fit */
@@ -456,13 +456,13 @@ MT_mremap(const char *path, int mode, vo
                        } else {
                                /* we got some other address: discard
                                 * it and make full mmap */
-                               munmap(p, new_size - old_size);
+                               munmap(p, *new_size - old_size);
 #ifdef NO_MMAP_ALIASING
                                msync(old_address, old_size, MS_SYNC);
 #endif
                                /* first create full mmap, then, if
                                 * successful, remove old mmap */
-                               p = mmap(NULL, new_size, prot, flags, fd, 0);
+                               p = mmap(NULL, *new_size, prot, flags, fd, 0);
                                if (p != MAP_FAILED)
                                        munmap(old_address, old_size);
                        }
@@ -479,7 +479,7 @@ MT_mremap(const char *path, int mode, vo
 #endif
                /* try to map an anonymous area as extent to the
                 * current map */
-               p = mmap((char *) old_address + old_size, new_size - old_size,
+               p = mmap((char *) old_address + old_size, *new_size - old_size,
                         prot, flags, fd, 0);
                /* no point trying a full map if this didn't work:
                 * there isn't enough space */
@@ -492,11 +492,11 @@ MT_mremap(const char *path, int mode, vo
                        } else {
                                /* we got some other address: discard
                                 * it and make full mmap */
-                               munmap(p, new_size - old_size);
+                               munmap(p, *new_size - old_size);
 #ifdef HAVE_MREMAP
                                /* first get an area large enough for
-                                * new_size */
-                               p = mmap(NULL, new_size, prot, flags, fd, 0);
+                                * *new_size */
+                               p = mmap(NULL, *new_size, prot, flags, fd, 0);
                                if (p != MAP_FAILED) {
                                        /* then overlay old mmap over new */
                                        void *q;
@@ -508,20 +508,20 @@ MT_mremap(const char *path, int mode, vo
                                        assert(q == p || q == MAP_FAILED);
                                        if (q == MAP_FAILED) {
                                                /* we didn't expect this... */
-                                               munmap(p, new_size);
+                                               munmap(p, *new_size);
                                                p = MAP_FAILED;
                                        }
                                }
 #else
                                p = MAP_FAILED;
                                if (path == NULL ||
-                                   new_size <= GDK_mmap_minsize) {
+                                   *new_size <= GDK_mmap_minsize) {
                                        /* size not too big yet or
                                         * anonymous, try to make new
                                         * anonymous mmap and copy
 
                                         * data over */
-                                       p = mmap(NULL, new_size, prot, flags,
+                                       p = mmap(NULL, *new_size, prot, flags,
                                                 fd, 0);
                                        if (p != MAP_FAILED) {
                                                memcpy(p, old_address,
@@ -544,13 +544,13 @@ MT_mremap(const char *path, int mode, vo
                                                return NULL;
                                        if (write(fd, old_address,
                                                  old_size) < 0 ||
-                                           lseek(fd, new_size - 1,
+                                           lseek(fd, *new_size - 1,
                                                  SEEK_SET) < 0 ||
                                            write(fd, "\0", 1) < 0) {
                                                close(fd);
                                                return NULL;
                                        }
-                                       p = mmap(NULL, new_size, prot, flags,
+                                       p = mmap(NULL, *new_size, prot, flags,
                                                 fd, 0);
                                        if (p != MAP_FAILED)
                                                munmap(old_address, old_size);
@@ -562,7 +562,7 @@ MT_mremap(const char *path, int mode, vo
                        close(fd);
        }
 #ifdef MMAP_DEBUG
-       fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
"PTRFMT"%s\n", path?path:"NULL", PTRFMTCAST old_address, old_size, new_size, 
PTRFMTCAST p, path && mode & MMAP_COPY ? " private" : "");
+       fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> 
"PTRFMT"%s\n", path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size, 
PTRFMTCAST p, path && mode & MMAP_COPY ? " private" : "");
 #endif
        return p == MAP_FAILED ? NULL : p;
 }
@@ -761,26 +761,28 @@ MT_munmap(void *p, size_t dummy)
 }
 
 void *
-MT_mremap(const char *path, int mode, void *old_address, size_t old_size, 
size_t new_size)
+MT_mremap(const char *path, int mode, void *old_address, size_t old_size, 
size_t *new_size)
 {
        void *p;
 
        /* doesn't make sense for us to extend read-only memory map */
        assert(mode & MMAP_WRITABLE);
 
-       if (old_size >= new_size)
+       if (old_size >= *new_size) {
+               *new_size = old_size;
                return old_address;     /* don't bother shrinking */
-       if (GDKextend(path, new_size) < 0)
+       }
+       if (GDKextend(path, *new_size) < 0)
                return NULL;
        if (path && !(mode & MMAP_COPY))
                MT_munmap(old_address, old_size);
-       p = MT_mmap(path, mode, new_size);
+       p = MT_mmap(path, mode, *new_size);
        if ((path == NULL || (mode & MMAP_COPY)) && p != (void *) -1) {
                memcpy(p, old_address, old_size);
                MT_munmap(old_address, old_size);
        }
 #ifdef MMAP_DEBUG
-       fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> "PTRFMT"\n", 
path?path:"NULL", PTRFMTCAST old_address, old_size, new_size, PTRFMTCAST p);
+       fprintf(stderr, "MT_mremap(%s,"PTRFMT","SZFMT","SZFMT") -> "PTRFMT"\n", 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size, PTRFMTCAST p);
 #endif
        return p;
 }
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -84,7 +84,7 @@ oid MAXoid(BAT *i);
 void MT_global_exit(int status)
        __attribute__((__noreturn__));
 void MT_init_posix(void);
-void *MT_mremap(const char *path, int mode, void *old_address, size_t 
old_size, size_t new_size);
+void *MT_mremap(const char *path, int mode, void *old_address, size_t 
old_size, size_t *new_size);
 int MT_msync(void *p, size_t off, size_t len, int mode);
 int OIDdirty(void);
 int OIDinit(void);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to