Changeset: 5fb5ecc31427 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5fb5ecc31427
Modified Files:
        sql/storage/store.c
        tools/mserver/mserver5.c
Branch: default
Log Message:

Avoid calling GDKfatal.


diffs (138 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1110,12 +1110,16 @@ load_schema(sql_trans *tr, sqlid id, oid
                        name = (char*)v;
                        s = find_sql_schema(tr, name);
                        _DELETE(v);
-                       if (s == NULL) 
-                               GDKfatal("SQL schema missing or incompatible, 
rebuild from archive");
+                       if (s == NULL) {
+                               GDKerror("SQL schema missing or incompatible, 
rebuild from archive");
+                               return NULL;
+                       }
                }
                s->base.id = sid;
        } else {
                s = SA_ZNEW(tr->sa, sql_schema);
+               if (s == NULL)
+                       return NULL;
                v = table_funcs.column_find_value(tr, find_sql_column(ss, 
"name"), rid);
                base_init(tr->sa, &s->base, sid, 0, v); _DELETE(v);
                v = table_funcs.column_find_value(tr, find_sql_column(ss, 
"authorization"), rid);
@@ -1245,7 +1249,7 @@ sql_trans_update_schemas(sql_trans* tr)
        table_funcs.rids_destroy(schemas);
 }
 
-static void
+static bool
 load_trans(sql_trans* tr, sqlid id)
 {
        sql_schema *syss = find_sql_schema(tr, "sys");
@@ -1260,7 +1264,9 @@ load_trans(sql_trans* tr, sqlid id)
 
        for(rid = table_funcs.rids_next(schemas); !is_oid_nil(rid); rid = 
table_funcs.rids_next(schemas)) {
                sql_schema *ns = load_schema(tr, id, rid);
-               if (ns && !instore(ns->base.id, id))
+               if (ns == NULL)
+                       return false;
+               if (!instore(ns->base.id, id))
                        cs_add(&tr->schemas, ns, 0);
        }
        /* members maybe from different schemas */
@@ -1270,6 +1276,7 @@ load_trans(sql_trans* tr, sqlid id)
                set_members(&s->tables);
        }
        table_funcs.rids_destroy(schemas);
+       return true;
 }
 
 static int
@@ -1932,8 +1939,12 @@ store_load(void) {
                store_oid = prev_oid;
 
        /* load remaining schemas, tables, columns etc */
-       if (!first)
-               load_trans(gtrans, id);
+       if (!first && !load_trans(gtrans, id)) {
+               GDKfree(store_oids);
+               store_oids = NULL;
+               nstore_oids = 0;
+               return -1;
+       }
        store_initialized = 1;
        GDKfree(store_oids);
        store_oids = NULL;
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -286,7 +286,8 @@ main(int argc, char **av)
 #endif
 #endif
        if (setlocale(LC_CTYPE, "") == NULL) {
-               GDKfatal("cannot set locale\n");
+               fprintf(stderr, "cannot set locale\n");
+               exit(1);
        }
 
        if (getcwd(monet_cwd, FILENAME_MAX - 1) == NULL) {
@@ -624,21 +625,21 @@ main(int argc, char **av)
                        snprintf(secret, sizeof(secret), "%s", 
"Xas632jsi2whjds8");
                } else {
                        if ((secretf = fopen(GDKgetenv("monet_vault_key"), 
"r")) == NULL) {
-                               snprintf(secret, sizeof(secret),
-                                               "unable to open vault_key_file 
%s: %s",
-                                               GDKgetenv("monet_vault_key"), 
strerror(errno));
+                               fprintf(stderr,
+                                       "unable to open vault_key_file %s: 
%s\n",
+                                       GDKgetenv("monet_vault_key"), 
strerror(errno));
                                /* don't show this as a crash */
                                msab_registerStop();
-                               GDKfatal("%s", secret);
+                               exit(1);
                        }
                        len = fread(secret, 1, sizeof(secret), secretf);
                        secret[len] = '\0';
                        len = strlen(secret); /* secret can contain null-bytes 
*/
                        if (len == 0) {
-                               snprintf(secret, sizeof(secret), "vault key has 
zero-length!");
+                               fprintf(stderr, "vault key has zero-length!\n");
                                /* don't show this as a crash */
                                msab_registerStop();
-                               GDKfatal("%s", secret);
+                               exit(1);
                        } else if (len < 5) {
                                fprintf(stderr, "#warning: your vault key is 
too short "
                                                                "(%zu), enlarge 
your vault key!\n", len);
@@ -648,14 +649,18 @@ main(int argc, char **av)
                if ((err = AUTHunlockVault(secretp)) != MAL_SUCCEED) {
                        /* don't show this as a crash */
                        msab_registerStop();
-                       GDKfatal("%s", err);
+                       fprintf(stderr, "%s\n", err);
+                       freeException(err);
+                       exit(1);
                }
        }
        /* make sure the authorisation BATs are loaded */
        if ((err = AUTHinitTables(NULL)) != MAL_SUCCEED) {
                /* don't show this as a crash */
                msab_registerStop();
-               GDKfatal("%s", err);
+               fprintf(stderr, "%s\n", err);
+               freeException(err);
+               exit(1);
        }
        if (mal_init()) {
                /* don't show this as a crash */
@@ -665,7 +670,9 @@ main(int argc, char **av)
 
        if((err = MSinitClientPrg(mal_clients, "user", "main")) != MAL_SUCCEED) 
{
                msab_registerStop();
-               GDKfatal("%s", err);
+               fprintf(stderr, "%s\n", err);
+               freeException(err);
+               exit(1);
        }
 
        emergencyBreakpoint();
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to