Changeset: cebb20f1bd24 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cebb20f1bd24
Modified Files:
        gdk/gdk_bbp.c
        gdk/gdk_select.c
        gdk/gdk_string.c
        sql/storage/bat/bat_storage.c
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
Branch: strheapvacuum
Log Message:

merge with default


diffs (truncated from 2193 to 300 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,8 +53,7 @@ test_big_endian(IS_BIG_ENDIAN)
 include(monetdb-functions)
 include(monetdb-findpackages)
 include(monetdb-toolchain)
-monetdb_default_toolchain()
-#monetdb_default_compiler_options()
+monetdb_default_compiler_options()
 
 include(monetdb-defines)
 monetdb_hg_revision()
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -382,15 +382,16 @@ dump_foreign_keys(Mapi mid, const char *
        if (tname != NULL) {
                char *s = sescape(schema);
                char *t = sescape(tname);
+               if (s == NULL || t == NULL) {
+                       free(s);
+                       free(t);
+                       goto bailout;
+               }
                maxquerylen = 1024 + strlen(t) + strlen(s);
                query = malloc(maxquerylen);
-               if (s == NULL || t == NULL || query == NULL) {
-                       if (s)
-                               free(s);
-                       if (t)
-                               free(t);
-                       if (query)
-                               free(query);
+               if (query == NULL) {
+                       free(s);
+                       free(t);
                        goto bailout;
                }
                snprintf(query, maxquerylen,
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -1255,6 +1255,7 @@ ODBCTranslateSQL(ODBCDbc *dbc, const SQL
                                                strncpy(q, nquery, pr);
                                                for (r = func->repl; *r; r++) {
                                                        if (*r == '\1' || *r == 
'\2' || *r == '\3' || *r == '\4') {
+                                                               assert(*r <= 
func->nargs);
                                                                if (args[*r - 
1].argstart[0] == '\'')
                                                                        q[pr++] 
= 'r';
                                                                strncpy(q + pr, 
args[*r - 1].argstart, args[*r - 1].arglen);
diff --git a/clients/odbc/driver/SQLTables.c b/clients/odbc/driver/SQLTables.c
--- a/clients/odbc/driver/SQLTables.c
+++ b/clients/odbc/driver/SQLTables.c
@@ -82,6 +82,8 @@ MNDBTables(ODBCStmt *stmt,
                                      "cast(null as varchar(1)) as remarks "
                               "from sys.env() e "
                               "where e.name = 'gdk_dbname'");
+               if (query == NULL)
+                       goto nomem;
        } else if (NameLength1 == 0 &&
                   NameLength3 == 0 &&
                   SchemaName &&
@@ -96,6 +98,8 @@ MNDBTables(ODBCStmt *stmt,
                                * schema remarks */
                                      "cast(null as varchar(1)) as remarks "
                               "from sys.schemas order by table_schem");
+               if (query == NULL)
+                       goto nomem;
        } else if (NameLength1 == 0 &&
                   NameLength2 == 0 &&
                   NameLength3 == 0 &&
@@ -108,6 +112,8 @@ MNDBTables(ODBCStmt *stmt,
                                      "table_type_name as table_type, "
                                      "cast(null as varchar(1)) as remarks "
                               "from sys.table_types order by table_type");
+               if (query == NULL)
+                       goto nomem;
        } else {
                /* no special case argument values */
                size_t querylen;
@@ -241,8 +247,6 @@ MNDBTables(ODBCStmt *stmt,
                free(sch);
        if (tab)
                free(tab);
-       if (query)
-               free(query);
        /* Memory allocation error */
        addStmtError(stmt, "HY001", NULL, 0);
        return SQL_ERROR;
diff --git a/cmake/monetdb-functions.cmake b/cmake/monetdb-functions.cmake
--- a/cmake/monetdb-functions.cmake
+++ b/cmake/monetdb-functions.cmake
@@ -49,33 +49,10 @@ function(monetdb_hg_revision)
   endif()
 endfunction()
 
-function(MT_addCompilerFlag REGEX_EXPRESSION FLAG_TO_ADD OLD_FLAGS BUILD 
NEW_FLAGS)
-  if(NOT "${OLD_FLAGS}" MATCHES "${REGEX_EXPRESSION}")
-    set(${NEW_FLAGS} "${OLD_FLAGS} ${FLAG_TO_ADD}" PARENT_SCOPE)
-    message(STATUS "Added ${FLAG_TO_ADD} flag for ${BUILD} build(s)")
-  endif()
-endfunction()
-
-function(MT_checkCompilerFlag Flag)
-  # WARNING this doesn't work with LINK_OPTIONS yet!
-  if(NOT "${CMAKE_C_FLAGS}" MATCHES "${Flag}")
-    # cmake will get confused if we don't remove - / = ,
-    string(REGEX REPLACE "[-/=,]" "" FLAG_TEST "${Flag}")
-    cmake_push_check_state()
-    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${Flag}")
-    check_c_source_compiles("int main(int argc,char** 
argv){(void)argc;(void)argv;return 0;}" COMPILER_${FLAG_TEST})
-    cmake_pop_check_state()
-    if(COMPILER_${FLAG_TEST})
-      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${Flag}" PARENT_SCOPE)
-      message(STATUS "Added ${Flag} flag for all build(s)")
-    endif()
-  endif()
-endfunction()
-
 function(add_option_if_available Flag)
   string(REGEX REPLACE "[-/=,]" "" FLAG_TEST "${Flag}")
   check_c_compiler_flag(${Flag} ${FLAG_TEST}_FOUND)
-  set(ISFOUND "${${FLAG_TEST}_FOUND}}")
+  set(ISFOUND "${${FLAG_TEST}_FOUND}")
   if(ISFOUND)
     add_compile_options("${Flag}")
   endif()
diff --git a/cmake/monetdb-toolchain.cmake b/cmake/monetdb-toolchain.cmake
--- a/cmake/monetdb-toolchain.cmake
+++ b/cmake/monetdb-toolchain.cmake
@@ -6,108 +6,6 @@
 # Copyright 1997 - July 2008 CWI, August 2008 - 2021 MonetDB B.V.
 #]]
 
-function(monetdb_default_toolchain)
-  if (${FORCE_COLORED_OUTPUT})
-    if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
-      MT_addCompilerFlag("-fdiagnostics-color=always" 
"-fdiagnostics-color=always" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-    elseif ("${CMAKE_C_COMPILER_ID}" MATCHES "^(Clang|AppleClang)$")
-      MT_addCompilerFlag("-fcolor-diagnostics" "-fcolor-diagnostics" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-    endif ()
-  endif ()
-
-  if(SANITIZER)
-    if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
-      MT_addCompilerFlag("-fsanitize=address" "-fsanitize=address" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      MT_addCompilerFlag("-fno-omit-frame-pointer" "-fno-omit-frame-pointer" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      add_definitions(-DNO_ATOMIC_INSTRUCTIONS)
-    else()
-      message(FATAL_ERROR "Sanitizer only supported with GCC")
-    endif()
-  endif()
-
-  if(STRICT)
-    if(${CMAKE_C_COMPILER_ID} MATCHES "^(GNU|Clang|AppleClang)$")
-      MT_addCompilerFlag("-Werror" "-Werror" "${CMAKE_C_FLAGS}" "all" 
CMAKE_C_FLAGS)
-      MT_addCompilerFlag("-Wall" "-Wall" "${CMAKE_C_FLAGS}" "all" 
CMAKE_C_FLAGS)
-      MT_addCompilerFlag("-Wextra" "-Wextra" "${CMAKE_C_FLAGS}" "all" 
CMAKE_C_FLAGS)
-      MT_addCompilerFlag("-W" "-W" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      MT_checkCompilerFlag("-Werror-implicit-function-declaration")
-
-      MT_checkCompilerFlag("-Wpointer-arith")
-      MT_checkCompilerFlag("-Wundef")
-      MT_checkCompilerFlag("-Wformat=2")
-      MT_checkCompilerFlag("-Wformat-overflow=1")
-      MT_checkCompilerFlag("-Wno-format-truncation")
-      MT_checkCompilerFlag("-Wno-format-nonliteral")
-      #MT_checkCompilerFlag("-Wformat-signedness")     -- numpy messes this up
-      MT_checkCompilerFlag("-Wno-cast-function-type")
-      MT_checkCompilerFlag("-Winit-self")
-      MT_checkCompilerFlag("-Winvalid-pch")
-      MT_checkCompilerFlag("-Wmissing-declarations")
-      MT_checkCompilerFlag("-Wmissing-format-attribute")
-      MT_checkCompilerFlag("-Wmissing-prototypes")
-      # need this for clang 9.1.0 on Darwin:
-      MT_checkCompilerFlag("-Wno-missing-field-initializers")
-      MT_checkCompilerFlag("-Wold-style-definition")
-      MT_checkCompilerFlag("-Wpacked")
-      MT_checkCompilerFlag("-Wunknown-pragmas")
-      MT_checkCompilerFlag("-Wvariadic-macros")
-      MT_checkCompilerFlag("-Wstack-protector")
-      MT_checkCompilerFlag("-fstack-protector-all")
-      MT_checkCompilerFlag("-Wpacked-bitfield-compat")
-      MT_checkCompilerFlag("-Wsync-nand")
-      MT_checkCompilerFlag("-Wjump-misses-init")
-      MT_checkCompilerFlag("-Wmissing-include-dirs")
-      MT_checkCompilerFlag("-Wlogical-op")
-      MT_checkCompilerFlag("-Wduplicated-cond")
-      MT_checkCompilerFlag("-Wduplicated-branches")
-      MT_checkCompilerFlag("-Wrestrict")
-      MT_checkCompilerFlag("-Wnested-externs")
-      MT_checkCompilerFlag("-Wmissing-noreturn")
-      MT_checkCompilerFlag("-Wuninitialized")
-
-      # since we use values of type "int8_t" as subscript,
-      # and int8_t may be defined as plain "char", we cannot
-      # allow this warning (part of -Wall)
-      MT_checkCompilerFlag("-Wno-char-subscripts")
-
-      MT_checkCompilerFlag("-Wunreachable-code")
-
-    elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Intel")
-      if(WIN32)
-        set(COMPILER_OPTION "/")
-        MT_addCompilerFlag("${COMPILER_OPTION}W3" "${COMPILER_OPTION}W3" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-        MT_addCompilerFlag("${COMPILER_OPTION}Qdiag-disable:11074" 
"${COMPILER_OPTION}Qdiag-disable:11074" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-        MT_addCompilerFlag("${COMPILER_OPTION}Qdiag-disable:11075" 
"${COMPILER_OPTION}Qdiag-disable:11075" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      else()
-        set(COMPILER_OPTION "-")
-        MT_addCompilerFlag("${COMPILER_OPTION}Wall" "${COMPILER_OPTION}Wall" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      endif()
-      MT_addCompilerFlag("${COMPILER_OPTION}Wcheck" "${COMPILER_OPTION}Wcheck" 
"${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      MT_addCompilerFlag("${COMPILER_OPTION}Werror-all" 
"${COMPILER_OPTION}Werror-all" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-      MT_addCompilerFlag("${COMPILER_OPTION}${INTEL_OPTION_EXTRA}wd2259" 
"${COMPILER_OPTION}${INTEL_OPTION_EXTRA}wd2259" "${CMAKE_C_FLAGS}" "all" 
CMAKE_C_FLAGS)
-    elseif(MSVC)
-      MT_addCompilerFlag("/WX" "/WX" "${CMAKE_C_FLAGS}" "all" CMAKE_C_FLAGS)
-    endif()
-  endif()
-
-  if(NOT MSVC)
-    cmake_push_check_state()
-    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS};-Wno-unreachable-code")
-    # Warning don't add '-' or '/' to the output variable!
-    check_c_source_compiles("int main(int argc,char** 
argv){(void)argc;(void)argv;return 0;}"
-      COMPILER_Wnounreachablecode)
-    cmake_pop_check_state()
-  endif()
-
-  if(NOT ASSERT)
-    MT_checkCompilerFlag("-DNDEBUG=1")
-  endif()
-
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" PARENT_SCOPE)
-
-endfunction()
-
 function(monetdb_default_compiler_options)
   if (${FORCE_COLORED_OUTPUT})
     if ("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
@@ -121,7 +19,8 @@ function(monetdb_default_compiler_option
     if(${CMAKE_C_COMPILER_ID} STREQUAL "GNU")
       add_compile_options("-fsanitize=address")
       add_compile_options("-fno-omit-frame-pointer")
-      add_compile_definitions(NO_ATOMIC_INSTRUCTIONS)
+      add_compile_definitions(SANITIZER)
+      add_link_options("-fsanitize=address")
     else()
       message(FATAL_ERROR "Sanitizer only supported with GCC")
     endif()
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -2007,6 +2007,7 @@ BBPdir_last(int n, char *buf, size_t buf
        }
        if (fclose(nbbpf) == EOF) {
                GDKsyserror("Closing BBP.dir file failed\n");
+               nbbpf = NULL;   /* can't close again */
                goto bailout;
        }
 
@@ -2864,7 +2865,8 @@ decref(bat i, bool logical, bool release
                        if (b->tvheap)
                                b->tvheap->dirty = true;
                }
-               farmid = b->theap->farmid;
+               if (b->theap)
+                       farmid = b->theap->farmid;
                MT_lock_unset(&b->theaplock);
        }
 
@@ -2901,16 +2903,24 @@ decref(bat i, bool logical, bool release
        if (lock)
                MT_lock_unset(&GDKswapLock(i));
 
-       if (swap && b != NULL) {
-               if (lrefs == 0 && (BBP_status(i) & BBPDELETED) == 0) {
-                       /* free memory (if loaded) and delete from
-                        * disk (if transient but saved) */
-                       BBPdestroy(b);
+       if (swap) {
+               if (b != NULL) {
+                       if (lrefs == 0 && (BBP_status(i) & BBPDELETED) == 0) {
+                               /* free memory (if loaded) and delete from
+                                * disk (if transient but saved) */
+                               BBPdestroy(b);
+                       } else {
+                               TRC_DEBUG(BAT_, "%s unload and free bat %d\n", 
func, i);
+                               /* free memory of transient */
+                               if (BBPfree(b) != GDK_SUCCEED)
+                                       return -1;      /* indicate failure */
+                       }
+               } else if (lrefs == 0 && (BBP_status(i) & BBPDELETED) == 0) {
+                       if ((b = BBP_desc(i)) != NULL)
+                               BATdelete(b);
+                       BBPclear(i, true);
                } else {
-                       TRC_DEBUG(BAT_, "%s unload and free bat %d\n", func, i);
-                       /* free memory of transient */
-                       if (BBPfree(b) != GDK_SUCCEED)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to