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

Reply via email to