Changeset: 13a4084f1bce for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/13a4084f1bce
Modified Files:
        gdk/gdk_utils.c
Branch: default
Log Message:

Make better use of our own (option) infrastructure.


diffs (181 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -968,8 +968,7 @@ GDKinit(opt *set, int setlen, bool embed
        const char *dbpath;
        const char *dbtrace;
        const char *p;
-       opt *n;
-       int i, nlen = 0;
+       int i;
        char buf[16];
 
        if (caller_revision) {
@@ -1089,7 +1088,8 @@ GDKinit(opt *set, int setlen, bool embed
        GDK_mem_maxsize = (size_t) ((double) MT_npages() * (double) 
MT_pagesize() * 0.815);
        const char *allow = mo_find_option(set, setlen, "allow_hge_upgrade");
        const char *procwalxit = mo_find_option(set, setlen, 
"process-wal-and-exit");
-       if (BBPinit(allow && strcmp(allow, "yes") == 0, procwalxit && 
strcmp(procwalxit, "yes") == 0) != GDK_SUCCEED)
+       if (BBPinit(allow && strcmp(allow, "yes") == 0,
+                   procwalxit && strcmp(procwalxit, "yes") == 0) != 
GDK_SUCCEED)
                return GDK_FAIL;
        first = false;
 
@@ -1099,70 +1099,75 @@ GDKinit(opt *set, int setlen, bool embed
                        GDK_mmap_minsize_persistent = 
GDK_mmap_minsize_transient;
        }
 
-       n = (opt *) malloc(setlen * sizeof(opt));
-       if (n == NULL) {
-               GDKsyserror("malloc failed\n");
-               return GDK_FAIL;
+       /* check some options before creating our first BAT */
+       p = mo_find_option(set, setlen, "gdk_mem_maxsize");
+       if (p) {
+               char *e;
+               GDK_mem_maxsize = (size_t) strtoll(p, &e, 10);
+               if (e && *e) {
+                       TRC_CRITICAL(GDK, "gdk_mem_maxsize must be an integer");
+                       return GDK_FAIL;
+               }
+               GDK_mem_maxsize = MAX(1 << 26, GDK_mem_maxsize);
+               if (GDK_mem_maxsize / 16 < GDK_mmap_minsize_transient)
+                       GDK_mmap_minsize_transient = MAX(MMAP_PAGESIZE, 
GDK_mem_maxsize / 16);
+               if (GDK_mmap_minsize_persistent > GDK_mmap_minsize_transient)
+                       GDK_mmap_minsize_persistent = 
GDK_mmap_minsize_transient;
        }
-
-       for (i = 0; i < setlen; i++) {
-               bool done = false;
-
-               for (int j = 0; j < nlen; j++) {
-                       if (strcmp(n[j].name, set[i].name) == 0) {
-                               if (n[j].kind < set[i].kind) {
-                                       n[j] = set[i];
-                               }
-                               done = true;
-                               break;
-                       }
+       p = mo_find_option(set, setlen, "gdk_vm_maxsize");
+       if (p) {
+               char *e;
+               GDK_vm_maxsize = (size_t) strtoll(p, &e, 10);
+               if (e && *e) {
+                       TRC_CRITICAL(GDK, "gdk_vm_maxsize must be an integer");
+                       return GDK_FAIL;
                }
-               if (!done) {
-                       n[nlen] = set[i];
-                       nlen++;
+               GDK_vm_maxsize = MAX(1 << 30, GDK_vm_maxsize);
+       }
+       p = mo_find_option(set, setlen, "gdk_mmap_minsize_persistent");
+       if (p) {
+               char *e;
+               GDK_mmap_minsize_persistent = (size_t) strtoll(p, &e, 10);
+               if (e && *e) {
+                       TRC_CRITICAL(GDK, "gdk_mmap_minsize_persistent must be 
an integer");
+                       return GDK_FAIL;
                }
        }
-       /* check some options before creating our first BAT */
-       for (i = 0; i < nlen; i++) {
-               if (strcmp("gdk_mem_maxsize", n[i].name) == 0) {
-                       GDK_mem_maxsize = (size_t) strtoll(n[i].value, NULL, 
10);
-                       GDK_mem_maxsize = MAX(1 << 26, GDK_mem_maxsize);
-                       if (GDK_mem_maxsize / 16 < GDK_mmap_minsize_transient)
-                               GDK_mmap_minsize_transient = MAX(MMAP_PAGESIZE, 
GDK_mem_maxsize / 16);
-                       if (GDK_mmap_minsize_persistent > 
GDK_mmap_minsize_transient)
-                               GDK_mmap_minsize_persistent = 
GDK_mmap_minsize_transient;
-               } else if (strcmp("gdk_vm_maxsize", n[i].name) == 0) {
-                       GDK_vm_maxsize = (size_t) strtoll(n[i].value, NULL, 10);
-                       GDK_vm_maxsize = MAX(1 << 30, GDK_vm_maxsize);
-               } else if (strcmp("gdk_mmap_minsize_persistent", n[i].name) == 
0) {
-                       GDK_mmap_minsize_persistent = (size_t) 
strtoll(n[i].value, NULL, 10);
-               } else if (strcmp("gdk_mmap_minsize_transient", n[i].name) == 
0) {
-                       GDK_mmap_minsize_transient = (size_t) 
strtoll(n[i].value, NULL, 10);
-               } else if (strcmp("gdk_mmap_pagesize", n[i].name) == 0) {
-                       GDK_mmap_pagesize = (size_t) strtoll(n[i].value, NULL, 
10);
-                       if (GDK_mmap_pagesize < 1 << 12 ||
-                           GDK_mmap_pagesize > 1 << 20 ||
-                           /* x & (x - 1): turn off rightmost 1 bit;
-                            * i.e. if result is zero, x is power of
-                            * two */
-                           (GDK_mmap_pagesize & (GDK_mmap_pagesize - 1)) != 0) 
{
-                               free(n);
-                               TRC_CRITICAL(GDK, "gdk_mmap_pagesize must be 
power of 2 between 2**12 and 2**20\n");
-                               return GDK_FAIL;
-                       }
+       p = mo_find_option(set, setlen, "gdk_mmap_minsize_transient");
+       if (p) {
+               char *e;
+               GDK_mmap_minsize_transient = (size_t) strtoll(p, &e, 10);
+               if (e && *e) {
+                       TRC_CRITICAL(GDK, "gdk_mmap_minsize_transient must be 
an integer");
+                       return GDK_FAIL;
+               }
+       }
+       p = mo_find_option(set, setlen, "gdk_mmap_pagesize");
+       if (p) {
+               char *e;
+               GDK_mmap_pagesize = (size_t) strtoll(p, &e, 10);
+               if (e && *e) {
+                       TRC_CRITICAL(GDK, "gdk_mmap_pagesize must be an 
integer");
+                       return GDK_FAIL;
+               }
+               if (GDK_mmap_pagesize < 1 << 12 ||
+                   GDK_mmap_pagesize > 1 << 20 ||
+                   /* x & (x - 1): turn off rightmost 1 bit; i.e. if
+                    * result is zero, x is power of two */
+                   (GDK_mmap_pagesize & (GDK_mmap_pagesize - 1)) != 0) {
+                       TRC_CRITICAL(GDK, "gdk_mmap_pagesize must be power of 2 
between 2**12 and 2**20\n");
+                       return GDK_FAIL;
                }
        }
 
        GDKkey = COLnew(0, TYPE_str, 100, TRANSIENT);
        GDKval = COLnew(0, TYPE_str, 100, TRANSIENT);
        if (GDKkey == NULL || GDKval == NULL) {
-               free(n);
                TRC_CRITICAL(GDK, "Could not create environment BATs");
                return GDK_FAIL;
        }
        if (BBPrename(GDKkey, "environment_key") != 0 ||
            BBPrename(GDKval, "environment_val") != 0) {
-               free(n);
                TRC_CRITICAL(GDK, "BBPrename of environment BATs failed");
                return GDK_FAIL;
        }
@@ -1170,13 +1175,27 @@ GDKinit(opt *set, int setlen, bool embed
        BBP_pid(GDKval->batCacheid) = 0;
 
        /* store options into environment BATs */
-       for (i = 0; i < nlen; i++)
-               if (GDKsetenv(n[i].name, n[i].value) != GDK_SUCCEED) {
-                       TRC_CRITICAL(GDK, "GDKsetenv %s failed", n[i].name);
-                       free(n);
+       for (i = 0; i < setlen; i++) {
+               if (set[i].kind == opt_builtin &&
+                   GDKsetenv(set[i].name, set[i].value) != GDK_SUCCEED) {
+                       TRC_CRITICAL(GDK, "GDKsetenv %s failed", set[i].name);
                        return GDK_FAIL;
                }
-       free(n);
+       }
+       for (i = 0; i < setlen; i++) {
+               if (set[i].kind == opt_config &&
+                   GDKsetenv(set[i].name, set[i].value) != GDK_SUCCEED) {
+                       TRC_CRITICAL(GDK, "GDKsetenv %s failed", set[i].name);
+                       return GDK_FAIL;
+               }
+       }
+       for (i = 0; i < setlen; i++) {
+               if (set[i].kind == opt_cmdline &&
+                   GDKsetenv(set[i].name, set[i].value) != GDK_SUCCEED) {
+                       TRC_CRITICAL(GDK, "GDKsetenv %s failed", set[i].name);
+                       return GDK_FAIL;
+               }
+       }
 
        if (GDKgetenv_int("gdk_nr_threads", 0) != 0) {
                GDKnr_threads = GDKgetenv_int("gdk_nr_threads", 0);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to