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

merge with default


diffs (212 lines):

diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -344,6 +344,7 @@ int
 HEAPextend(Heap *h, size_t size)
 {
        char nme[PATHLENGTH], *ext = NULL;
+       char *failure = "None";
 
        if (h->filename) {
                strncpy(nme, h->filename, sizeof(nme));
@@ -352,6 +353,8 @@ HEAPextend(Heap *h, size_t size)
        }
        if (size <= h->size)
                return 0;
+       else
+               failure = "size > h->size";
 
        if (h->storage != STORE_MEM) {
                char *p;
@@ -370,6 +373,8 @@ HEAPextend(Heap *h, size_t size)
                        h->size = size;
                        h->base = p;
                        return 0;
+               } else {
+                       failure = "MT_mremap() failed";
                }
        } else {
                /* extend a malloced heap, possibly switching over to
@@ -394,6 +399,8 @@ HEAPextend(Heap *h, size_t size)
                        HEAPDEBUG fprintf(stderr, "#HEAPextend: extending 
malloced heap " SZFMT " " SZFMT " " PTRFMT " " PTRFMT "\n", size, h->size, 
PTRFMTCAST p, PTRFMTCAST h->base);
                        if (h->base)
                                return 0;
+                       else
+                               failure = "h->storage == STORE_MEM && !must_map 
&& !h->base";
                }
                /* too big: convert it to a disk-based temporary heap */
                if (can_mmap) {
@@ -416,8 +423,10 @@ HEAPextend(Heap *h, size_t size)
                                 * to use a file from the cache (or
                                 * create a new one) */
                                h->filename = GDKmalloc(strlen(nme) + 
strlen(ext) + 2);
-                               if (h->filename == NULL)
+                               if (h->filename == NULL) {
+                                       failure = "h->storage == STORE_MEM && 
can_map && h->filename == NULL";
                                        goto failed;
+                               }
                                sprintf(h->filename, "%s.%s", nme, ext);
                                h->base = HEAPcacheFind(&h->size, h->filename, 
STORE_MMAP);
                                if (h->base) {
@@ -425,6 +434,8 @@ HEAPextend(Heap *h, size_t size)
                                        memcpy(h->base, bak.base, bak.free);
                                        HEAPfree(&bak);
                                        return 0;
+                               } else {
+                                       failure = "h->storage == STORE_MEM && 
can_map && !h->base";
                                }
                        }
                        fd = GDKfdlocate(nme, "wb", ext);
@@ -447,11 +458,15 @@ HEAPextend(Heap *h, size_t size)
                                        memcpy(h->base, bak.base, bak.free);
                                        HEAPfree(&bak);
                                        return 0;
+                               } else {
+                                       failure = "h->storage == STORE_MEM && 
can_map && fd >= 0 && HEAPload() < 0";
                                }
                                /* couldn't allocate, now first save
                                 * data to file */
-                               if (HEAPsave_intern(&bak, nme, ext, ".tmp") < 0)
+                               if (HEAPsave_intern(&bak, nme, ext, ".tmp") < 
0) {
+                                       failure = "h->storage == STORE_MEM && 
can_map && fd >= 0 && HEAPsave_intern() < 0";
                                        goto failed;
+                               }
                                /* then free memory */
                                HEAPfree(&bak);
                                /* and load heap back in via
@@ -460,15 +475,21 @@ HEAPextend(Heap *h, size_t size)
                                        /* success! */
                                        GDKclrerr();    /* don't leak errors 
from e.g. HEAPload */
                                        return 0;
+                               } else {
+                                       failure = "h->storage == STORE_MEM && 
can_map && fd >= 0 && HEAPload_intern() < 0";
                                }
                                /* we failed */
+                       } else {
+                               failure = "h->storage == STORE_MEM && can_map 
&& fd < 0";
                        }
+               } else {
+                       failure = "h->storage == STORE_MEM && !can_map";
                }
          failed:
                *h = bak;
        }
-       GDKerror("HEAPextend: failed to extend to " SZFMT " for %s%s%s\n",
-                size, nme, ext ? "." : "", ext ? ext : "");
+       GDKerror("HEAPextend: failed to extend to " SZFMT " for %s%s%s: %s\n",
+                size, nme, ext ? "." : "", ext ? ext : "", failure);
        return -1;
 }
 
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -412,8 +412,10 @@ MT_mremap(const char *path, int mode, vo
        if (*new_size < old_size) {
                /* shrink */
                if (munmap((char *) old_address + *new_size,
-                          old_size - *new_size) < 0)
+                          old_size - *new_size) < 0) {
+                       fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): munmap() failed\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                        return NULL;
+               }
                if (truncate(path, (off_t) *new_size) < 0)
                        fprintf(stderr, "#MT_mremap(%s): truncate failed\n", 
path);
 #ifdef MMAP_DEBUG
@@ -432,10 +434,36 @@ MT_mremap(const char *path, int mode, vo
        if (!(mode & MMAP_COPY) && path != NULL) {
                /* "normal" memory map */
 
-               if ((fd = open(path, O_RDWR)) < 0)
+               if ((fd = open(path, O_RDWR)) < 0) {
+                       fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): open() failed\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                        return NULL;
+<<<<<<< variant A
                if (GDKextendf(fd, *new_size) < 0) {
+>>>>>>> variant B
+               }
+               if (fstat(fd, &stb) < 0) {
+                       /* shouldn't happen */
                        close(fd);
+                       fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): fstat() failed\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
+                       return NULL;
+               }
+               /* if necessary, extend the underlying file */
+               if (stb.st_size < (off_t) *new_size &&
+                   (lseek(fd, *new_size - 1, SEEK_SET) < 0 ||
+                    write(fd, "\0", 1) < 0)) {
+####### Ancestor
+               if (fstat(fd, &stb) < 0) {
+                       /* shouldn't happen */
+                       close(fd);
+                       return NULL;
+               }
+               /* if necessary, extend the underlying file */
+               if (stb.st_size < (off_t) *new_size &&
+                   (lseek(fd, *new_size - 1, SEEK_SET) < 0 ||
+                    write(fd, "\0", 1) < 0)) {
+======= end
+                       close(fd);
+                       fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): lseek() or write() failed\n", __FILE__, 
__LINE__, path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                        return NULL;
                }
 #ifdef HAVE_MREMAP
@@ -474,8 +502,10 @@ MT_mremap(const char *path, int mode, vo
 #ifdef MAP_ANONYMOUS
                flags |= MAP_ANONYMOUS;
 #else
-               if ((fd = open("/dev/zero", O_RDWR)) < 0)
+               if ((fd = open("/dev/zero", O_RDWR)) < 0) {
+                       fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): open('/dev/zero') failed\n", __FILE__, 
__LINE__, path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                        return NULL;
+               }
 #endif
                /* try to map an anonymous area as extent to the
                 * current map */
@@ -539,12 +569,15 @@ MT_mremap(const char *path, int mode, vo
                                        fd = open(p, O_RDWR | O_CREAT,
                                                  MONETDB_MODE);
                                        free(p);
-                                       if (fd < 0)
+                                       if (fd < 0) {
+                                               fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): fd < 0\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                                                return NULL;
+                                       }
                                        if (write(fd, old_address,
                                                  old_size) < 0 ||
                                            ftruncate(fd, *new_size) < 0) {
                                                close(fd);
+                                               fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): write() or lseek() or write() 
failed\n", __FILE__, __LINE__, path?path:"NULL", PTRFMTCAST old_address, 
old_size, *new_size);
                                                return NULL;
                                        }
                                        p = mmap(NULL, *new_size, prot, flags,
@@ -561,6 +594,8 @@ MT_mremap(const char *path, int mode, vo
 #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" : "");
 #endif
+       if (p == MAP_FAILED)
+               fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): p == MAP_FAILED\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
        return p == MAP_FAILED ? NULL : p;
 }
 
@@ -769,8 +804,10 @@ MT_mremap(const char *path, int mode, vo
                *new_size = old_size;
                return old_address;     /* don't bother shrinking */
        }
-       if (GDKextend(path, *new_size) < 0)
+       if (GDKextend(path, *new_size) < 0) {
+               fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): GDKextend() failed\n", __FILE__, 
__LINE__, path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
                return NULL;
+       }
        if (path && !(mode & MMAP_COPY))
                MT_munmap(old_address, old_size);
        p = MT_mmap(path, mode, *new_size);
@@ -781,6 +818,8 @@ MT_mremap(const char *path, int mode, vo
 #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);
 #endif
+       if (p == NULL)
+               fprintf(stderr, "= %s:%d: 
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): p == NULL\n", __FILE__, __LINE__, 
path?path:"NULL", PTRFMTCAST old_address, old_size, *new_size);
        return p;
 }
 
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to