Changeset: 13db2865dffe for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13db2865dffe
Modified Files:
clients/R/Tests/deps-test.timeout
gdk/gdk_heap.c
gdk/gdk_private.h
gdk/gdk_storage.c
gdk/gdk_utils.c
monetdb5/optimizer/opt_mergetable.c
Branch: default
Log Message:
Merge with Jul2015 branch.
diffs (163 lines):
diff --git a/clients/R/Tests/deps-test.timeout
b/clients/R/Tests/deps-test.timeout
--- a/clients/R/Tests/deps-test.timeout
+++ b/clients/R/Tests/deps-test.timeout
@@ -1,1 +1,1 @@
-300
+5
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -190,7 +190,7 @@ HEAPextend(Heap *h, size_t size, int may
if (size == 0)
size = GDK_mmap_pagesize;
- p = MT_mremap(path,
+ p = GDKmremap(path,
h->storage == STORE_PRIV ?
MMAP_COPY | MMAP_READ | MMAP_WRITE :
MMAP_READ | MMAP_WRITE,
@@ -201,7 +201,7 @@ HEAPextend(Heap *h, size_t size, int may
h->base = p;
return GDK_SUCCEED; /* success */
}
- failure = "MT_mremap() failed";
+ failure = "GDKmremap() failed";
} else {
/* extend a malloced heap, possibly switching over to
* file-mapped storage */
@@ -343,7 +343,7 @@ HEAPshrink(Heap *h, size_t size)
return GDK_SUCCEED;
}
path = GDKfilepath(h->farmid, BATDIR, nme, ext);
- p = MT_mremap(path,
+ p = GDKmremap(path,
h->storage == STORE_PRIV ?
MMAP_COPY | MMAP_READ | MMAP_WRITE :
MMAP_READ | MMAP_WRITE,
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -119,6 +119,8 @@ void BBPdump(void); /* never called: fo
__attribute__((__visibility__("hidden")));
__hidden gdk_return GDKmove(int farmid, const char *dir1, const char *nme1,
const char *ext1, const char *dir2, const char *nme2, const char *ext2)
__attribute__((__visibility__("hidden")));
+__hidden void *GDKmremap(const char *path, int mode, void *old_address, size_t
old_size, size_t *new_size)
+ __attribute__((__visibility__("hidden")));
__hidden gdk_return GDKmunmap(void *addr, size_t len)
__attribute__((__visibility__("hidden")));
__hidden void *GDKreallocmax(void *pold, size_t size, size_t *maxsize, int
emergency)
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -645,10 +645,15 @@ DESCclean(BAT *b)
#define MSYNC_BACKGROUND
#ifndef DISABLE_MSYNC
+struct msync {
+ bat id;
+ Heap *h;
+};
+
static void
BATmsyncImplementation(void *arg)
{
- Heap *h = arg;
+ Heap *h = ((struct msync *) arg)->h;
char *adr;
size_t len;
size_t offset;
@@ -660,6 +665,8 @@ BATmsyncImplementation(void *arg)
adr -= MT_pagesize() - offset;
if (len)
(void) MT_msync(adr, len);
+ BBPunfix(((struct msync *) arg)->id);
+ GDKfree(arg);
}
#endif
@@ -670,21 +677,30 @@ BATmsync(BAT *b)
#ifdef MSYNC_BACKGROUND
MT_Id tid;
#endif
+ struct msync *arg;
assert(b->batPersistence == PERSISTENT);
- if (b->T->heap.storage == STORE_MMAP) {
+ if (b->T->heap.storage == STORE_MMAP &&
+ (arg = GDKmalloc(sizeof(*arg))) != NULL) {
+ arg->id = b->batCacheid;
+ arg->h = &b->T->heap;
+ BBPfix(b->batCacheid);
#ifdef MSYNC_BACKGROUND
- MT_create_thread(&tid, BATmsyncImplementation, (void *)
&b->T->heap, MT_THR_DETACHED);
+ MT_create_thread(&tid, BATmsyncImplementation, arg,
MT_THR_DETACHED);
#else
- BATmsyncImplementation((void*) &b->T->heap);
+ BATmsyncImplementation(arg);
#endif
}
- if (b->T->vheap && b->T->vheap->storage == STORE_MMAP) {
+ if (b->T->vheap && b->T->vheap->storage == STORE_MMAP &&
+ (arg = GDKmalloc(sizeof(*arg))) != NULL) {
+ arg->id = b->batCacheid;
+ arg->h = b->T->vheap;
+ BBPfix(b->batCacheid);
#ifdef MSYNC_BACKGROUND
- MT_create_thread(&tid, BATmsyncImplementation, (void *)
b->T->vheap, MT_THR_DETACHED);
+ MT_create_thread(&tid, BATmsyncImplementation, arg,
MT_THR_DETACHED);
#else
- BATmsyncImplementation((void*) b->T->vheap);
+ BATmsyncImplementation(arg);
#endif
}
#else
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -588,7 +588,7 @@ GDKmemdump(void)
* applied: for all mallocs > 1MB.
*/
static void
-GDKmemfail(str s, size_t len)
+GDKmemfail(const char *s, size_t len)
{
int bak = GDKdebug;
@@ -943,6 +943,25 @@ GDKmunmap(void *addr, size_t size)
return ret == 0 ? GDK_SUCCEED : GDK_FAIL;
}
+#undef GDKmremap
+void *
+GDKmremap(const char *path, int mode, void *old_address, size_t old_size,
size_t *new_size)
+{
+ void *ret;
+
+ ret = MT_mremap(path, mode, old_address, old_size, new_size);
+ if (ret == NULL) {
+ GDKmemfail("GDKmremap", *new_size);
+ ret = MT_mremap(path, mode, old_address, old_size, new_size);
+ if (ret != NULL)
+ fprintf(stderr, "#GDKmremap: recovery ok.
Continuing..\n");
+ }
+ if (ret != NULL) {
+ memdec(old_size, "GDKmremap");
+ meminc(*new_size, "GDKmremap");
+ }
+ return ret;
+}
/*
* @+ Session Initialization
diff --git a/monetdb5/optimizer/opt_mergetable.c
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -1401,7 +1401,6 @@ mat_topn(MalBlkPtr mb, InstrPtr p, matli
pushInstruction(mb,q);
}
- ml->v[piv].pushed = 1;
ml->v[piv].packed = 1;
ml->v[piv].type = mat_slc;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list