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