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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list