Changeset: 791e3f3ec523 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=791e3f3ec523
Modified Files:
gdk/gdk.h
gdk/gdk_bat.c
gdk/gdk_bbp.mx
gdk/gdk_heap.c
gdk/gdk_private.h
gdk/gdk_storage.c
monetdb5/modules/kernel/bat5.mx
Branch: default
Log Message:
Use an enum type for heap storage mode.
diffs (truncated from 363 to 300 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -605,6 +605,14 @@ typedef enum { GDK_FAIL, GDK_SUCCEED } g
} \
} while (0)
+/* Heap storage modes */
+typedef enum {
+ STORE_MEM = 0, /* load into GDKmalloced memory */
+ STORE_MMAP = 1, /* mmap() into virtual memory */
+ STORE_PRIV = 2, /* BAT copy of copy-on-write mmap */
+ STORE_INVALID /* invalid value, used to indicate error */
+} storage_t;
+
typedef struct {
size_t maxsize; /* maximum realloc size (bytes) */
size_t free; /* index where free area starts. */
@@ -612,11 +620,11 @@ typedef struct {
char *base; /* base pointer in memory. */
str filename; /* file containing image of the heap */
- char storage; /* storage mode (mmap/malloc). */
unsigned int copied:1, /* a copy of an existing map. */
hashash:1,/* the string heap contains hash values */
forcemap:1; /* force STORE_MMAP even if heap exists */
- bte newstorage; /* new desired storage mode at re-allocation. */
+ storage_t storage; /* storage mode (mmap/malloc). */
+ storage_t newstorage; /* new desired storage mode at re-allocation. */
bte dirty; /* specific heap dirty marker */
bat parentid; /* cache id of VIEW parent bat */
} Heap;
@@ -1567,10 +1575,6 @@ gdk_export BAT *BATgroup(BAT *b, int sta
* call it issues buffer management advice to the OS kernel, as for the
* expected usage pattern of the memory in a heap.
*/
-/* Heap storage modes */
-#define STORE_MEM 0 /* load into GDKmalloced memory */
-#define STORE_MMAP 1 /* mmap() into virtual memory */
-#define STORE_PRIV 2 /* BAT copy of copy-on-write mmap */
gdk_export int GDK_mem_pagebits; /* page size for non-linear mmaps */
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2500,7 +2500,7 @@ backup_new(Heap *hp, int lockbat)
#define ACCESSMODE(wr,rd) ((wr)?BAT_WRITE:(rd)?BAT_READ:-1)
/* transition heap from readonly to writable */
-static int
+static storage_t
HEAPchangeaccess(Heap *hp, int dstmode, int existing)
{
if (hp->base == NULL || hp->newstorage == STORE_MEM || !existing ||
dstmode == -1)
@@ -2513,19 +2513,19 @@ HEAPchangeaccess(Heap *hp, int dstmode,
}
if (hp->storage == STORE_MMAP) { /* 6=>4 */
hp->dirty = 1;
- return backup_new(hp, BBP_THREADMASK) ? -1 : STORE_MMAP;
/* only called for existing bats */
+ return backup_new(hp, BBP_THREADMASK) ? STORE_INVALID :
STORE_MMAP; /* only called for existing bats */
}
return hp->storage; /* 7=>5 */
}
/* heap changes persistence mode (at commit point) */
-static int
+static storage_t
HEAPcommitpersistence(Heap *hp, int writable, int existing)
{
if (existing) { /* existing, ie will become transient */
if (hp->storage == STORE_MMAP && hp->newstorage == STORE_PRIV
&& writable) { /* 6=>2 */
hp->dirty = 1;
- return backup_new(hp, -1) ? -1 : STORE_MMAP; /* only
called for existing bats */
+ return backup_new(hp, -1) ? STORE_INVALID : STORE_MMAP;
/* only called for existing bats */
}
return hp->newstorage; /* 4=>0,5=>1,7=>3,c=>a no change */
}
@@ -2546,7 +2546,7 @@ int
BATcheckmodes(BAT *b, int existing)
{
int wr = (b->batRestricted == BAT_WRITE);
- int m0 = 0, m1 = 0, m2 = 0, m3 = 0;
+ storage_t m0 = 0, m1 = 0, m2 = 0, m3 = 0;
int dirty = 0;
BATcheck(b, "BATcheckmodes");
@@ -2571,7 +2571,8 @@ BATcheckmodes(BAT *b, int existing)
m3 = HEAPcommitpersistence(b->T->vheap, wr || ta, existing);
dirty |= (b->T->vheap->newstorage != m3);
}
- if (m0 < 0 || m1 < 0 || m2 < 0 || m3 < 0)
+ if (m0 == STORE_INVALID || m1 == STORE_INVALID ||
+ m2 == STORE_INVALID || m3 == STORE_INVALID)
return -1;
if (dirty) {
@@ -2624,7 +2625,7 @@ BATsetaccess(BAT *b, int newmode)
int existing = BBP_status(b->batCacheid) & BBPEXISTING;
int wr = (newmode == BAT_WRITE);
int rd = (bakmode == BAT_WRITE);
- int m0, m1, m2 = 0, m3 = 0;
+ storage_t m0, m1, m2 = 0, m3 = 0;
int b0, b1, b2 = 0, b3 = 0;
if (b->batSharecnt && newmode != BAT_READ) {
@@ -2650,7 +2651,8 @@ BATsetaccess(BAT *b, int newmode)
b3 = b->T->vheap->newstorage;
m3 = HEAPchangeaccess(b->T->vheap, ACCESSMODE(wr && ta,
rd && ta), existing);
}
- if (m0 < 0 || m1 < 0 || m2 < 0 || m3 < 0)
+ if (m0 == STORE_INVALID || m1 == STORE_INVALID ||
+ m2 == STORE_INVALID || m3 == STORE_INVALID)
return NULL;
/* set new access mode and mmap modes */
diff --git a/gdk/gdk_bbp.mx b/gdk/gdk_bbp.mx
--- a/gdk/gdk_bbp.mx
+++ b/gdk/gdk_bbp.mx
@@ -924,9 +924,9 @@ BBPreadEntries(FILE *fp, char *src, int
bs->@1.heap.size = (size_t) size;
bs->@1.heap.base = NULL;
bs->@1.heap.filename = NULL;
- bs->@1.heap.storage = (char) storage;
+ bs->@1.heap.storage = (storage_t) storage;
bs->@1.heap.copied = 0;
- bs->@1.heap.newstorage = (bte) storage;
+ bs->@1.heap.newstorage = (storage_t) storage;
bs->@1.heap.dirty = 0;
nread += n;
}
@@ -954,10 +954,10 @@ BBPreadEntries(FILE *fp, char *src, int
bs->@1.vheap->size = (size_t) size;
bs->@1.vheap->base = NULL;
bs->@1.vheap->filename = NULL;
- bs->@1.vheap->storage = (char) storage;
+ bs->@1.vheap->storage = (storage_t) storage;
bs->@1.vheap->copied = 0;
bs->@1.vheap->hashash = @1hashash != 0;
- bs->@1.vheap->newstorage = (bte) storage;
+ bs->@1.vheap->newstorage = (storage_t) storage;
bs->@1.vheap->dirty = 0;
bs->@1.vheap->parentid = bid;
nread += n;
@@ -1461,7 +1461,7 @@ new_bbpentry(stream *s, bat i)
BBP_desc(i)->@1.align,
BBP_desc(i)->@1.heap.free,
BBP_desc(i)->@1.heap.size,
- BBP_desc(i)->@1.heap.newstorage) < 0)
+ (int) BBP_desc(i)->@1.heap.newstorage) < 0)
return -1;
@
@c
@@ -1473,7 +1473,7 @@ new_bbpentry(stream *s, bat i)
mnstr_printf(s, " " SZFMT " " SZFMT " %d",
BBP_desc(i)->@1.vheap->free,
BBP_desc(i)->@1.vheap->size,
- BBP_desc(i)->@1.vheap->newstorage) < 0)
+ (int) BBP_desc(i)->@1.vheap->newstorage) < 0)
return -1;
@
@c
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -104,7 +104,7 @@ HEAPcacheInit(void)
}
static int
-HEAPcacheAdd( void *base, size_t maxsz, char *fn, int storage, int free_file )
+HEAPcacheAdd(void *base, size_t maxsz, char *fn, storage_t storage, int
free_file)
{
int added = 0;
@@ -126,18 +126,18 @@ HEAPcacheAdd( void *base, size_t maxsz,
}
if (!added)
return GDKmunmap(base, maxsz);
- HEAPDEBUG fprintf(stderr, "#HEAPcacheAdd (%s) " SZFMT " " PTRFMT " %d
%d %d\n", fn, maxsz, PTRFMTCAST base, storage, free_file, hc->used);
+ HEAPDEBUG fprintf(stderr, "#HEAPcacheAdd (%s) " SZFMT " " PTRFMT " %d
%d %d\n", fn, maxsz, PTRFMTCAST base, (int) storage, free_file, hc->used);
return 0;
}
static void *
-HEAPcacheFind( size_t *maxsz, char *fn, int mode )
+HEAPcacheFind(size_t *maxsz, char *fn, storage_t mode)
{
void *base = NULL;
*maxsz = (1 + (*maxsz >> 16)) << 16; /* round up to 64K */
if (hc && mode == STORE_MMAP && hc->used < hc->sz) {
- HEAPDEBUG fprintf(stderr, "#HEAPcacheFind (%s)" SZFMT " %d
%d\n", fn, *maxsz, mode, hc->used);
+ HEAPDEBUG fprintf(stderr, "#HEAPcacheFind (%s)" SZFMT " %d
%d\n", fn, *maxsz, (int) mode, hc->used);
gdk_set_lock(HEAPcacheLock, "HEAPcache_init");
if (hc->used) {
@@ -295,7 +295,7 @@ HEAPalloc(Heap *h, size_t nitems, size_t
if (stat(nme, &st) != 0) {
h->storage = STORE_MMAP;
- h->base = HEAPcacheFind(&h->maxsize, of, h->storage );
+ h->base = HEAPcacheFind(&h->maxsize, of, h->storage);
h->filename = of;
} else {
char *ext;
@@ -640,7 +640,7 @@ HEAPload_intern(Heap *h, const char *nme
}
HEAPDEBUG {
- fprintf(stderr, "#HEAPload(%s.%s,storage=%d,free=" SZFMT
",size=" SZFMT ")\n", nme, ext, h->storage, h->free, h->size);
+ fprintf(stderr, "#HEAPload(%s.%s,storage=%d,free=" SZFMT
",size=" SZFMT ")\n", nme, ext, (int) h->storage, h->free, h->size);
}
/* On some OSs (WIN32,Solaris), it is prohibited to write to a
file that is open in MAP_PRIVATE (FILE_MAP_COPY)
@@ -696,7 +696,7 @@ HEAPload(Heap *h, const char *nme, const
static int
HEAPsave_intern(Heap *h, const char *nme, const char *ext, const char *suffix)
{
- int store = h->newstorage;
+ storage_t store = h->newstorage;
long_str extension;
if (h->base == NULL) {
@@ -712,7 +712,7 @@ HEAPsave_intern(Heap *h, const char *nme
store = h->storage;
}
HEAPDEBUG {
- fprintf(stderr, "#HEAPsave(%s.%s,storage=%d,free=" SZFMT
",size=" SZFMT ")\n", nme, ext, h->newstorage, h->free, h->size);
+ fprintf(stderr, "#HEAPsave(%s.%s,storage=%d,free=" SZFMT
",size=" SZFMT ")\n", nme, ext, (int) h->newstorage, h->free, h->size);
}
return GDKsave(nme, ext, h->base, h->free, store);
}
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -60,7 +60,7 @@ void BBPtrim(size_t delta);
void BBPunshare(bat b);
void GDKclrerr(void);
FILE *GDKfilelocate(const char *nme, const char *mode, const char *ext);
-char *GDKload(const char *nme, const char *ext, size_t size, size_t chunk, int
mode);
+char *GDKload(const char *nme, const char *ext, size_t size, size_t chunk,
storage_t mode);
void GDKlockHome(void);
void GDKlog(_In_z_ _Printf_format_string_ const char *format, ...)
__attribute__((__format__(__printf__, 1, 2)));
@@ -69,7 +69,7 @@ int GDKmove(const char *dir1, const char
int GDKmunmap(void *addr, size_t len);
void *GDKreallocmax(void *pold, size_t size, size_t *maxsize, int emergency);
int GDKremovedir(const char *nme);
-int GDKsave(const char *nme, const char *ext, void *buf, size_t size, int
mode);
+int GDKsave(const char *nme, const char *ext, void *buf, size_t size,
storage_t mode);
int GDKssort_rev(void *h, void *t, void *base, size_t n, int hs, int ts, int
tpe);
int GDKssort(void *h, void *t, void *base, size_t n, int hs, int ts, int tpe);
int GDKunlink(const char *dir, const char *nme, const char *extension);
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -245,11 +245,11 @@ GDKmove(const char *dir1, const char *nm
* The primary concern here is to handle STORE_MMAP and STORE_MEM.
*/
int
-GDKsave(const char *nme, const char *ext, void *buf, size_t size, int mode)
+GDKsave(const char *nme, const char *ext, void *buf, size_t size, storage_t
mode)
{
int fd = -1, err = 0;
- IODEBUG THRprintf(GDKstdout, "#GDKsave: name=%s, ext=%s, mode %d\n",
nme, ext ? ext : "", mode);
+ IODEBUG THRprintf(GDKstdout, "#GDKsave: name=%s, ext=%s, mode %d\n",
nme, ext ? ext : "", (int) mode);
if (mode == STORE_MMAP) {
/*
@@ -268,7 +268,7 @@ GDKsave(const char *nme, const char *ext
if (size)
err = MT_msync(buf, 0, size, MMAP_SYNC);
if (err)
- GDKsyserror("GDKsave: error on: name=%s, ext=%s,
mode=%d\n", nme, ext ? ext : "", mode);
+ GDKsyserror("GDKsave: error on: name=%s, ext=%s,
mode=%d\n", nme, ext ? ext : "", (int) mode);
IODEBUG THRprintf(GDKstdout, "#MT_msync(buf " PTRFMT ", size "
SZFMT ", MMAP_SYNC) = %d\n", PTRFMTCAST buf, size, err);
} else {
if ((fd = GDKfdlocate(nme, "wb", ext)) >= 0) {
@@ -281,7 +281,7 @@ GDKsave(const char *nme, const char *ext
if (ret < 0) {
err = -1;
- GDKsyserror("GDKsave: error " SSZFMT "
on: name=%s, ext=%s, mode=%d\n", ret, nme, ext ? ext : "", mode);
+ GDKsyserror("GDKsave: error " SSZFMT "
on: name=%s, ext=%s, mode=%d\n", ret, nme, ext ? ext : "", (int) mode);
break;
}
size -= ret;
@@ -297,10 +297,10 @@ GDKsave(const char *nme, const char *ext
if (err && GDKunlink(BATDIR, nme, ext)) {
/* do not tolerate corrupt heap images
* (BBPrecover on restart will kill them) */
- GDKfatal("GDKsave: could not open: name=%s, ext=%s,
mode %d\n", nme, ext ? ext : "", mode);
+ GDKfatal("GDKsave: could not open: name=%s, ext=%s,
mode %d\n", nme, ext ? ext : "", (int) mode);
}
} else if (mode != STORE_MMAP) {
- GDKerror("GDKsave: failed name=%s, ext=%s, mode %d\n", nme, ext
? ext : "", mode);
+ GDKerror("GDKsave: failed name=%s, ext=%s, mode %d\n", nme, ext
? ext : "", (int) mode);
}
return err;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list