Changeset: 89358d4f40bb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=89358d4f40bb
Modified Files:
NT/monetdb_config.h.in
gdk/gdk_posix.c
gdk/gdk_posix.h
gdk/gdk_system.h
gdk/gdk_utils.c
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_private.h
monetdb5/mal/mal_readline.c
monetdb5/mal/mal_scenario.c
monetdb5/mal/mal_session.c
monetdb5/modules/atoms/mcurl.c
sql/backends/monet5/UDF/pyapi/pyapi.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/vaults/lidar/lidar.c
sql/common/sql_list.c
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/server/sql_parser.y
sql/storage/store.c
tools/mserver/mserver5.c
tools/mserver/shutdowntest.c
Branch: default
Log Message:
Merge with Jul2017 branch.
diffs (truncated from 1089 to 300 lines):
diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -347,9 +347,6 @@
/* Define to 1 if you have the <malloc.h> header file. */
#define HAVE_MALLOC_H 1
-/* Define to 1 if you have the `mallopt' function. */
-/* #undef HAVE_MALLOPT */
-
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -1002,8 +1002,11 @@ int
win_stat(const char *pathname, struct _stat64 *st)
{
char buf[128], *p = reduce_dir_name(pathname, buf, sizeof(buf));
- int ret = _stat64(p, st);
+ int ret;
+ if (p == NULL)
+ return -1;
+ ret = _stat64(p, st);
if (p != buf)
free(p);
return ret;
@@ -1013,8 +1016,11 @@ int
win_rmdir(const char *pathname)
{
char buf[128], *p = reduce_dir_name(pathname, buf, sizeof(buf));
- int ret = _rmdir(p);
+ int ret;
+ if (p == NULL)
+ return -1;
+ ret = _rmdir(p);
if (ret < 0 && errno != ENOENT) {
/* it could be the <expletive deleted> indexing
* service which prevents us from doing what we have a
@@ -1080,9 +1086,12 @@ int
win_mkdir(const char *pathname, const int mode)
{
char buf[128], *p = reduce_dir_name(pathname, buf, sizeof(buf));
- int ret = _mkdir(p);
+ int ret;
(void) mode;
+ if (p == NULL)
+ return -1;
+ ret = _mkdir(p);
if (p != buf)
free(p);
return ret;
diff --git a/gdk/gdk_posix.h b/gdk/gdk_posix.h
--- a/gdk/gdk_posix.h
+++ b/gdk/gdk_posix.h
@@ -41,29 +41,6 @@
#include <direct.h>
#endif
-/* Some systems (SGI, Sun) call malloc before we get a chance to call
- * mallopt, and mallopt should be called before the first call to
- * malloc. Therefore we do as if we don't have mallopt, even though
- * in reality we do. */
-#ifdef HAVE_MALLOPT
-#undef HAVE_MALLOPT
-#endif
-
-#ifndef M_MXFAST
-#define M_MXFAST 1 /* set size of blocks to be fast */
-#endif
-#ifndef M_NLBLKS
-#define M_NLBLKS 2 /* set number of block in a holding block */
-#endif
-#ifndef M_GRAIN
-#define M_GRAIN 3 /* set number of sizes mapped to one,
for */
- /* small blocks */
-#endif
-#ifndef M_KEEP
-#define M_KEEP 4 /* retain contents of block after a free */
- /* until another allocation */
-#endif
-
/*
* @- locking, sleep
*/
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -209,8 +209,11 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
/* SQL storage allocator, and hence we have no control */ \
/* over when the lock is destroyed and the memory freed */ \
if (strncmp((n), "sa_", 3) != 0) { \
+ MT_Lock * volatile _p; \
while (ATOMIC_TAS(GDKlocklistlock, dummy) != 0) \
; \
+ for (_p = GDKlocklist; _p; _p = _p->next) \
+ assert(_p != (l)); \
(l)->next = GDKlocklist; \
GDKlocklist = (l); \
ATOMIC_CLEAR(GDKlocklistlock, dummy); \
@@ -225,19 +228,12 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
/* SQL storage allocator, and hence we have no control */ \
/* over when the lock is destroyed and the memory freed */ \
if (strncmp((l)->name, "sa_", 3) != 0) { \
- MT_Lock * volatile _p; \
- /* save a copy for statistical purposes */ \
- _p = GDKmalloc(sizeof(MT_Lock)); \
+ MT_Lock * volatile *_p; \
while (ATOMIC_TAS(GDKlocklistlock, dummy) != 0) \
; \
- if (_p) { \
- memcpy(_p, l, sizeof(MT_Lock)); \
- _p->next = GDKlocklist; \
- GDKlocklist = _p; \
- } \
- for (_p = GDKlocklist; _p; _p = _p->next) \
- if (_p->next == (l)) { \
- _p->next = (l)->next; \
+ for (_p = &GDKlocklist; *_p; _p = &(*_p)->next) \
+ if ((l) == *_p) { \
+ *_p = (l)->next; \
break; \
} \
ATOMIC_CLEAR(GDKlocklistlock, dummy); \
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -521,6 +521,8 @@ GDKinit(opt *set, int setlen)
}
n = (opt *) malloc(setlen * sizeof(opt));
+ if (n == NULL)
+ GDKfatal("GDKinit: malloc failed\n");
for (i = 0; i < setlen; i++) {
int done = 0;
int j;
@@ -698,6 +700,7 @@ GDKreset(int status, int exit)
Thread t, s;
struct serverthread *st;
int farmid;
+ int i;
if( GDKkey){
BBPunfix(GDKkey->batCacheid);
@@ -786,8 +789,16 @@ GDKreset(int status, int exit)
GDKnrofthreads = 0;
close_stream((stream *) THRdata[0]);
close_stream((stream *) THRdata[1]);
- memset((char*) GDKbatLock,0, sizeof(GDKbatLock));
- memset((char*) GDKbbpLock,0,sizeof(GDKbbpLock));
+ for (i = 0; i <= BBP_BATMASK; i++) {
+ MT_lock_destroy(&GDKbatLock[i].swap);
+ MT_lock_destroy(&GDKbatLock[i].hash);
+ MT_lock_destroy(&GDKbatLock[i].imprints);
+ }
+ for (i = 0; i <= BBP_THREADMASK; i++) {
+ MT_lock_destroy(&GDKbbpLock[i].alloc);
+ MT_lock_destroy(&GDKbbpLock[i].trim);
+ GDKbbpLock[i].free = 0;
+ }
memset((char*) GDKthreads, 0, sizeof(GDKthreads));
memset((char*) THRdata, 0, sizeof(THRdata));
@@ -796,6 +807,19 @@ GDKreset(int status, int exit)
MT_lock_unset(&GDKthreadLock);
//gdk_system_reset(); CHECK OUT
}
+#ifdef NEED_MT_LOCK_INIT
+ MT_lock_destroy(&MT_system_lock);
+#if defined(USE_PTHREAD_LOCKS) && defined(ATOMIC_LOCK)
+ MT_lock_destroy(&GDKstoppedLock);
+ MT_lock_destroy(&mbyteslock);
+#endif
+ MT_lock_destroy(&GDKnameLock);
+ MT_lock_destroy(&GDKthreadLock);
+ MT_lock_destroy(&GDKtmLock);
+#ifndef NDEBUG
+ MT_lock_destroy(&mallocsuccesslock);
+#endif
+#endif
#ifndef HAVE_EMBEDDED
if (exit) {
MT_global_exit(status);
@@ -1046,7 +1070,7 @@ GDKerror(const char *format, ...)
}
va_start(ap, format);
if (vsnprintf(message + len, sizeof(message) - (len + 2), format, ap) <
0)
- strcpy(message, GDKERROR "an error occurred within GDKerror,
possibly malloc failure.\n");
+ strcpy(message, GDKERROR "an error occurred within
GDKerror.\n");
va_end(ap);
GDKaddbuf(message);
@@ -1400,7 +1424,8 @@ THRprintf(stream *s, const char *format,
if (bf != THRprintbuf)
free(bf);
bf = (str) malloc(bfsz);
- assert(bf != NULL);
+ if (bf == NULL)
+ return -1;
} while (1);
p += n;
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -57,7 +57,7 @@ int RAPIEnabled(void) {
}
// The R-environment should be single threaded, calling for some protective
measures.
-static MT_Lock rapiLock;
+static MT_Lock rapiLock MT_LOCK_INITIALIZER("rapiLock");
static int rapiInitialized = FALSE;
static char* rtypenames[] = { "NIL", "SYM", "LIST", "CLO", "ENV", "PROM",
"LANG", "SPECIAL", "BUILTIN", "CHAR", "LGL", "unknown",
"unknown",
@@ -511,8 +511,14 @@ void* RAPIloopback(void *query) {
str RAPIprelude(void *ret) {
+#ifdef NEED_MT_LOCK_INIT
+ static int initialized = 0;
+ /* since we don't destroy the lock, only initialize it once */
+ if (!initialized)
+ MT_lock_init(&rapiLock, "rapi_lock");
+ initialized = 1;
+#endif
(void) ret;
- MT_lock_init(&rapiLock, "rapi_lock");
if (RAPIEnabled()) {
MT_lock_set(&rapiLock);
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -151,12 +151,14 @@ void mserver_reset(int exit)
GDKfree(mal_clients->prompt);
GDKfree(mal_clients->username);
freeStack(mal_clients->glb);
- freeSymbol(mal_clients->curprg);
+ if (mal_clients->nspace)
+ freeModule(mal_clients->nspace);
mal_client_reset();
mal_linker_reset();
mal_resource_reset();
mal_runtime_reset();
mal_module_reset();
+ mdbExit();
memset((char*)monet_cwd,0, sizeof(monet_cwd));
monet_memory = 0;
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -57,7 +57,7 @@ void
mal_client_reset(void)
{
MAL_MAXCLIENTS = 0;
- if ( mal_clients)
+ if (mal_clients)
GDKfree(mal_clients);
}
diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c
--- a/monetdb5/mal/mal_debugger.c
+++ b/monetdb5/mal/mal_debugger.c
@@ -77,6 +77,15 @@ mdbInit(void)
return 0;
}
+void
+mdbExit(void)
+{
+ if (mdbTable) {
+ GDKfree(mdbTable);
+ mdbTable = 0;
+ }
+}
+
static char
isBreakpoint(Client cntxt, MalBlkPtr mb, InstrPtr p, int pc)
{
diff --git a/monetdb5/mal/mal_private.h b/monetdb5/mal/mal_private.h
--- a/monetdb5/mal/mal_private.h
+++ b/monetdb5/mal/mal_private.h
@@ -22,8 +22,6 @@
__attribute__((__visibility__("hidden")));
__hidden str defaultScenario(Client c) /* used in src/mal/mal_session.c */
__attribute__((__visibility__("hidden")));
-__hidden void exitScenario(Client c) /* used in
src/mal/mal_session.c */
- __attribute__((__visibility__("hidden")));
__hidden void mdbStep(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int pc)
__attribute__((__visibility__("hidden")));
@@ -54,6 +52,8 @@
__hidden int mdbInit(void)
__attribute__((__visibility__("hidden")));
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list