Changeset: 874c587e8379 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/874c587e8379
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_private.h
Branch: multi-cachelock
Log Message:

Merge with default.


diffs (truncated from 3845 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -222,7 +222,6 @@ int BBPrelease(bat b);
 int BBPrename(BAT *b, const char *nme);
 int BBPretain(bat b);
 gdk_return BBPsave(BAT *b);
-void BBPshare(bat b);
 gdk_return BBPsync(int cnt, bat *restrict subcommit, BUN *restrict sizes, lng 
logno, lng transid);
 void BBPtmlock(void);
 void BBPtmunlock(void);
@@ -412,8 +411,8 @@ void *THRgetdata(int);
 int THRgettid(void);
 int THRhighwater(void);
 void THRsetdata(int, void *);
-gdk_return TMsubcommit(BAT *bl);
-gdk_return TMsubcommit_list(bat *restrict subcommit, BUN *restrict sizes, int 
cnt, lng logno, lng transid);
+gdk_return TMsubcommit(BAT *bl) __attribute__((__warn_unused_result__));
+gdk_return TMsubcommit_list(bat *restrict subcommit, BUN *restrict sizes, int 
cnt, lng logno, lng transid) __attribute__((__warn_unused_result__));
 void VALclear(ValPtr v);
 int VALcmp(const ValRecord *p, const ValRecord *q);
 void *VALconvert(int typ, ValPtr t);
@@ -1070,16 +1069,12 @@ const char *malRef;
 void mal_atom_reset(void);
 ClientRec *mal_clients;
 MT_Lock mal_contextLock;
-MT_Lock mal_copyLock;
-MT_Lock mal_delayLock;
 _Noreturn void mal_exit(int status);
 int mal_init(char *modules[], bool embedded, const char *initpasswd);
 void mal_instruction_reset(void);
 void mal_module(const char *name, mel_atom *atoms, mel_func *funcs);
 void mal_module2(const char *name, mel_atom *atoms, mel_func *funcs, mel_init 
initfunc, const char *code);
-MT_Lock mal_profileLock;
 str mal_quote(const char *msg, size_t size);
-MT_Lock mal_remoteLock;
 void mal_reset(void);
 int mal_startup(void);
 void mal_unquote(char *msg);
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -117,7 +117,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
                        } else if (strcmp(buf, "database") == 0) {
                                dotfile->dbname = strdup(q);
                                q = NULL;
-                        } else if (strcmp(buf, "host") == 0) {
+                       } else if (strcmp(buf, "host") == 0) {
                                dotfile->host = strdup(q);
                                q = NULL;
                        } else if (strcmp(buf, "language") == 0) {
@@ -146,7 +146,7 @@ parse_dotmonetdb(DotMonetdb *dotfile)
                        } else if (strcmp(buf, "width") == 0) {
                                dotfile->pagewidth = atoi(q);
                                q = NULL;
-                        } else if (strcmp(buf, "port") == 0) {
+                       } else if (strcmp(buf, "port") == 0) {
                                dotfile->port = atoi(q);
                                q = NULL;
                        }
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -3256,14 +3256,14 @@ main(int argc, char **argv)
 
        /* parse config file first, command line options override */
        parse_dotmonetdb(&dotfile);
-        user = dotfile.user;
-        passwd = dotfile.passwd;
+       user = dotfile.user;
+       passwd = dotfile.passwd;
        dbname = dotfile.dbname;
-        language = dotfile.language;
+       language = dotfile.language;
        host = dotfile.host;
        save_history = dotfile.save_history;
-        output = dotfile.output;
-        pagewidth = dotfile.pagewidth;
+       output = dotfile.output;
+       pagewidth = dotfile.pagewidth;
        port = dotfile.port;
        pagewidthset = pagewidth != 0;
        if (language) {
diff --git a/clients/mapiclient/msqldump.c b/clients/mapiclient/msqldump.c
--- a/clients/mapiclient/msqldump.c
+++ b/clients/mapiclient/msqldump.c
@@ -106,9 +106,9 @@ main(int argc, char **argv)
 #endif
 
        parse_dotmonetdb(&dotfile);
-        user = dotfile.user;
-        passwd = dotfile.passwd;
-        dbname = dotfile.dbname;
+       user = dotfile.user;
+       passwd = dotfile.passwd;
+       dbname = dotfile.dbname;
        host = dotfile.host;
        port = dotfile.port;
 
diff --git a/cmake/monetdb-toolchain.cmake b/cmake/monetdb-toolchain.cmake
--- a/cmake/monetdb-toolchain.cmake
+++ b/cmake/monetdb-toolchain.cmake
@@ -57,7 +57,16 @@ function(monetdb_default_compiler_option
       add_option_if_available("-Wundef")
       add_option_if_available("-Wformat=2")
       add_option_if_available("-Wformat-overflow=1")
-      #add_option_if_available("-Wno-format-truncation")
+      if(${CMAKE_C_COMPILER_ID} MATCHES "^GNU$")
+       if(${CMAKE_C_COMPILER_VERSION} VERSION_LESS "9.5.0")
+         # on Ubuntu 20.04 with gcc 9.4.0 when building a Release
+         # version we get a warning (hence error) about possible
+         # buffer overflow in a call to snprintf, this option avoids
+         # that; I have no idea which version of gcc is safe, so the
+         # test may have to be refined
+         add_option_if_available("-Wno-format-truncation")
+       endif()
+      endif()
       add_option_if_available("-Wno-format-nonliteral")
       #add_option_if_available("-Wformat-signedness")  -- numpy messes this up
       add_option_if_available("-Wno-cast-function-type")
diff --git a/ctest/monetdb5/mal/test_malEmbeddedBoot.c 
b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
--- a/ctest/monetdb5/mal/test_malEmbeddedBoot.c
+++ b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
@@ -19,9 +19,9 @@ main(void)
     gdk_res = GDKinit(NULL, 0, true);
     if (gdk_res != GDK_SUCCEED) {
                msg = createException(MAL, "embedded.monetdb_startup", 
"GDKinit() failed");
-        return 1;
+               return 1;
     }
     if ((msg = malEmbeddedBoot(0, 0, 0, 0, false)) != MAL_SUCCEED)
-        return 1;
+               return 1;
     return 0;
 }
diff --git a/ctest/tools/monetdbe/cmocka_test.c 
b/ctest/tools/monetdbe/cmocka_test.c
--- a/ctest/tools/monetdbe/cmocka_test.c
+++ b/ctest/tools/monetdbe/cmocka_test.c
@@ -132,7 +132,7 @@ int
 main(void)
 {
        const struct CMUnitTest tests[] = {
-        cmocka_unit_test(create_table_test),
+               cmocka_unit_test(create_table_test),
                cmocka_unit_test(populate_table_test),
                cmocka_unit_test(query_table_test),
                cmocka_unit_test(query_table_test2),
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2069,8 +2069,10 @@ BUNtoid(BAT *b, BUN p)
 /*
  * @+ Transaction Management
  */
-gdk_export gdk_return TMsubcommit(BAT *bl);
-gdk_export gdk_return TMsubcommit_list(bat *restrict subcommit, BUN *restrict 
sizes, int cnt, lng logno, lng transid);
+gdk_export gdk_return TMsubcommit(BAT *bl)
+       __attribute__((__warn_unused_result__));
+gdk_export gdk_return TMsubcommit_list(bat *restrict subcommit, BUN *restrict 
sizes, int cnt, lng logno, lng transid)
+       __attribute__((__warn_unused_result__));
 
 /*
  * @- Delta Management
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3605,8 +3605,9 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                res = BUNtail(bi, bi.minpos);
        } else {
                oid pos;
-               BAT *pb = NULL;
+               BAT *pb = BATdescriptor(VIEWtparent(b));
                Heap *oidxh = NULL;
+               bool usepoidx = false;
 
                if (BATcheckorderidx(b)) {
                        MT_lock_set(&b->batIdxLock);
@@ -3616,8 +3617,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                        MT_lock_unset(&b->batIdxLock);
                }
                if (oidxh == NULL &&
-                   VIEWtparent(b) &&
-                   (pb = BBP_cache(VIEWtparent(b))) != NULL &&
+                   pb != NULL &&
                    BATcheckorderidx(pb)) {
                        /* no lock on b needed since it's a view */
                        MT_lock_set(&pb->batIdxLock);
@@ -3627,6 +3627,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                            pb->hseqbase == b->hseqbase &&
                            (oidxh = pb->torderidx) != NULL) {
                                HEAPincref(oidxh);
+                               usepoidx = true;
                        }
                        MT_lock_unset(&pb->batIdxLock);
                        MT_lock_unset(&pb->theaplock);
@@ -3635,7 +3636,7 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                        const oid *ords = (const oid *) oidxh->base + 
ORDERIDXOFF;
                        BUN r;
                        if (!bi.nonil) {
-                               MT_thread_setalgorithm(pb ? "binsearch on 
parent oidx" : "binsearch on oidx");
+                               MT_thread_setalgorithm(usepoidx ? "binsearch on 
parent oidx" : "binsearch on oidx");
                                r = binsearch(ords, 0, bi.type, bi.base,
                                              bi.vh ? bi.vh->base : NULL,
                                              bi.width, 0, bi.count,
@@ -3656,17 +3657,15 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                                /* no non-nil values */
                                pos = oid_nil;
                        } else {
-                               MT_thread_setalgorithm(pb ? "using parent oidx" 
: "using oidx");
+                               MT_thread_setalgorithm(usepoidx ? "using parent 
oidx" : "using oidx");
                                pos = ords[r];
                        }
                        HEAPdecref(oidxh, false);
                } else {
                        Imprints *imprints = NULL;
-                       if ((VIEWtparent(b) == 0 ||
-                            bi.count == BATcount(BBP_cache(VIEWtparent(b)))) &&
+                       if ((pb == NULL || bi.count == BATcount(pb)) &&
                            BATcheckimprints(b)) {
-                               if (VIEWtparent(b)) {
-                                       BAT *pb = BBP_cache(VIEWtparent(b));
+                               if (pb != NULL) {
                                        MT_lock_set(&pb->batIdxLock);
                                        imprints = pb->timprints;
                                        if (imprints != NULL)
@@ -3712,10 +3711,8 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                        MT_lock_set(&b->theaplock);
                        if (bi.count == BATcount(b) && bi.h == b->theap)
                                b->tminpos = bi.minpos;
-                       bat pbid = VIEWtparent(b);
                        MT_lock_unset(&b->theaplock);
-                       if (pbid) {
-                               BAT *pb = BBP_cache(pbid);
+                       if (pb) {
                                MT_lock_set(&pb->theaplock);
                                if (bi.count == BATcount(pb) &&
                                    bi.h == pb->theap)
@@ -3723,6 +3720,8 @@ BATmin_skipnil(BAT *b, void *aggr, bit s
                                MT_lock_unset(&pb->theaplock);
                        }
                }
+               if (pb)
+                       BBPunfix(pb->batCacheid);
        }
        if (aggr == NULL) {
                s = ATOMlen(bi.type, res);
@@ -3756,24 +3755,26 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
 {
        const void *res = NULL;
        size_t s;
-       BATiter bi;
        lng t0 = 0;
 
        TRC_DEBUG_IF(ALGO) t0 = GDKusec();
 
        if (!ATOMlinear(b->ttype)) {
+               /* there is no such thing as a largest value if you
+                * can't compare values */
                GDKerror("non-linear type");
                return NULL;
        }
-       bi = bat_iterator(b);
+       BATiter bi = bat_iterator(b);
        if (bi.count == 0) {
                res = ATOMnilptr(bi.type);
        } else if (bi.maxpos != BUN_NONE) {
                res = BUNtail(bi, bi.maxpos);
        } else {
                oid pos;
-               BAT *pb = NULL;
+               BAT *pb = BATdescriptor(VIEWtparent(b));
                Heap *oidxh = NULL;
+               bool usepoidx = false;
 
                if (BATcheckorderidx(b)) {
                        MT_lock_set(&b->batIdxLock);
@@ -3783,8 +3784,7 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
                        MT_lock_unset(&b->batIdxLock);
                }
                if (oidxh == NULL &&
-                   VIEWtparent(b) &&
-                   (pb = BBP_cache(VIEWtparent(b))) != NULL &&
+                   pb != NULL &&
                    BATcheckorderidx(pb)) {
                        /* no lock on b needed since it's a view */
                        MT_lock_set(&pb->batIdxLock);
@@ -3794,6 +3794,7 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
                            pb->hseqbase == b->hseqbase &&
                            (oidxh = pb->torderidx) != NULL) {
                                HEAPincref(oidxh);
+                               usepoidx = true;
                        }
                        MT_lock_unset(&pb->batIdxLock);
                        MT_lock_unset(&pb->theaplock);
@@ -3801,7 +3802,7 @@ BATmax_skipnil(BAT *b, void *aggr, bit s
                if (oidxh != NULL) {
                        const oid *ords = (const oid *) oidxh->base + 
ORDERIDXOFF;
 
-                       MT_thread_setalgorithm(pb ? "using parent oidx" : 
"using oids");
+                       MT_thread_setalgorithm(usepoidx ? "using parent oidx" : 
"using oids");
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to