Changeset: f3f489edfd9f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f3f489edfd9f
Modified Files:
gdk/gdk_firstn.c
gdk/gdk_group.c
gdk/gdk_logger.c
gdk/gdk_posix.c
gdk/gdk_private.h
gdk/gdk_project.c
gdk/gdk_system.c
gdk/gdk_system.h
gdk/gdk_system_private.h
gdk/gdk_utils.c
gdk/gdk_value.c
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_function.c
monetdb5/mal/mal_import.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_listing.c
monetdb5/mal/mal_module.c
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_resolve.c
monetdb5/mal/mal_session.c
monetdb5/mal/mal_stack.h
monetdb5/modules/atoms/blob.c
monetdb5/modules/atoms/color.c
monetdb5/modules/atoms/identifier.c
monetdb5/modules/atoms/inet.c
monetdb5/modules/atoms/json.c
monetdb5/modules/atoms/mtime.c
monetdb5/modules/atoms/streams.c
monetdb5/modules/kernel/algebra.c
monetdb5/modules/mal/inspect.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/tablet.c
monetdb5/modules/mal/tokenizer.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_scenario.c
Branch: default
Log Message:
Merge with Jun2016 branch.
diffs (truncated from 1362 to 300 lines):
diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c
--- a/gdk/gdk_firstn.c
+++ b/gdk/gdk_firstn.c
@@ -656,6 +656,8 @@ BATfirstn_grouped(BAT **topn, BAT **gids
* can use the base type */
tpe = ATOMbasetype(tpe); /* takes care of oid */
groups = GDKmalloc(sizeof(*groups) * n);
+ if( groups == NULL)
+ return GDK_FAIL;
oldcand = cand;
if (asc) {
switch (tpe) {
@@ -960,6 +962,8 @@ BATfirstn_grouped_with_groups(BAT **topn
* can use the base type */
tpe = ATOMbasetype(tpe); /* takes care of oid */
groups = GDKmalloc(sizeof(*groups) * n);
+ if( groups == NULL)
+ return GDK_FAIL;
gv = (const oid *) Tloc(g, 0);
oldcand = cand;
if (asc) {
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -711,6 +711,9 @@ BATgroup_internal(BAT **groups, BAT **ex
unsigned char *restrict bgrps = GDKmalloc(256);
const unsigned char *restrict w = (const unsigned char *)
Tloc(b, 0);
unsigned char v;
+
+ if( bgrps == NULL)
+ goto error;
memset(bgrps, 0xFF, 256);
if (histo)
memset(cnts, 0, maxgrps * sizeof(lng));
@@ -737,6 +740,9 @@ BATgroup_internal(BAT **groups, BAT **ex
unsigned short *restrict sgrps = GDKmalloc(65536 *
sizeof(short));
const unsigned short *restrict w = (const unsigned short *)
Tloc(b, 0);
unsigned short v;
+
+ if( sgrps == NULL)
+ goto error;
memset(sgrps, 0xFF, 65536 * sizeof(short));
if (histo)
memset(cnts, 0, maxgrps * sizeof(lng));
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1219,6 +1219,9 @@ bm_subcommit(logger *lg, BAT *list_bid,
BATiter iter = (list_nme)?bat_iterator(list_nme):bat_iterator(list_bid);
gdk_return res;
+ if( n == NULL)
+ return GDK_FAIL;
+
n[i++] = 0; /* n[0] is not used */
BATloop(list_bid, p, q) {
bat col = *(log_bid *) Tloc(list_bid, p);
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -582,6 +582,12 @@ MT_mremap(const char *path, int mode, vo
if (fd >= 0)
close(fd);
p = malloc(strlen(path) + 5);
+ if ( p == NULL){
+ GDKsyserror("MT_mremap:
malloc() failed\n");
+ fprintf(stderr, "= %s:%d:
MT_mremap(%s,"PTRFMT","SZFMT","SZFMT"): fd < 0\n", __FILE__, __LINE__, path,
PTRFMTCAST old_address, old_size, *new_size);
+ return NULL;
+ }
+
strcat(strcpy(p, path), ".tmp");
fd = open(p, O_RDWR | O_CREAT,
MONETDB_MODE);
@@ -1048,6 +1054,8 @@ reduce_dir_name(const char *src, char *d
if (len >= cap)
buf = malloc(len + 1);
+ if( buf == NULL)
+ return NULL;
while (--len > 0 && src[len - 1] != ':' && src[len] == DIR_SEP)
;
for (buf[++len] = 0; len > 0; buf[len] = src[len])
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -161,8 +161,6 @@ void BBPdump(void); /* never called: fo
__hidden void IMPSprint(BAT *b)
__attribute__((__visibility__("hidden")));
#endif
-__hidden gdk_return unshare_string_heap(BAT *b)
- __attribute__((__visibility__("hidden")));
__hidden void MT_init_posix(void)
__attribute__((__visibility__("hidden")));
__hidden void *MT_mremap(const char *path, int mode, void *old_address, size_t
old_size, size_t *new_size)
@@ -189,6 +187,8 @@ void BBPdump(void); /* never called: fo
__attribute__((__visibility__("hidden")));
__hidden var_t strLocate(Heap *h, const char *v)
__attribute__((__visibility__("hidden")));
+__hidden gdk_return unshare_string_heap(BAT *b)
+ __attribute__((__visibility__("hidden")));
__hidden void VIEWdestroy(BAT *b)
__attribute__((__visibility__("hidden")));
__hidden gdk_return VIEWreset(BAT *b)
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -443,6 +443,8 @@ BATprojectchain(BAT **bats)
for (n = 0; bats[n]; n++)
;
ba = GDKmalloc(sizeof(*ba) * n);
+ if( ba == NULL)
+ return NULL;
b = *bats++;
cnt = BATcount(b); /* this will be the size of the output */
hseq = b->hseqbase; /* this will be the seqbase of the output */
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -497,6 +497,30 @@ join_threads(void)
pthread_mutex_unlock(&posthread_lock);
}
+void
+join_detached_threads(void)
+{
+ struct posthread *p;
+ int waited;
+ pthread_t tid;
+
+ pthread_mutex_lock(&posthread_lock);
+ do {
+ waited = 0;
+ for (p = posthreads; p; p = p->next) {
+ tid = p->tid;
+ rm_posthread_locked(p);
+ free(p);
+ pthread_mutex_unlock(&posthread_lock);
+ pthread_join(tid, NULL);
+ pthread_mutex_lock(&posthread_lock);
+ waited = 1;
+ break;
+ }
+ } while (waited);
+ pthread_mutex_unlock(&posthread_lock);
+}
+
int
MT_create_thread(MT_Id *t, void (*f) (void *), void *arg, enum MT_thr_detach d)
{
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -228,11 +228,13 @@ gdk_export ATOMIC_TYPE volatile GDKlocks
MT_Lock * volatile _p; \
/* save a copy for statistical purposes */ \
_p = GDKmalloc(sizeof(MT_Lock)); \
- memcpy(_p, l, sizeof(MT_Lock)); \
while (ATOMIC_TAS(GDKlocklistlock, dummy) != 0) \
; \
- _p->next = GDKlocklist; \
- GDKlocklist = _p; \
+ 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; \
diff --git a/gdk/gdk_system_private.h b/gdk/gdk_system_private.h
--- a/gdk/gdk_system_private.h
+++ b/gdk/gdk_system_private.h
@@ -12,6 +12,8 @@
#error this file should not be included outside its source directory
#endif
+__hidden void join_detached_threads(void)
+ __attribute__((__visibility__("hidden")));
__declspec(noreturn) void MT_exit_thread(int status)
__attribute__((__noreturn__));
__hidden void MT_global_exit(int status)
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -687,6 +687,7 @@ GDKreset(int status)
GDKfree(st);
}
MT_lock_unset(&GDKthreadLock);
+ join_detached_threads();
if (status == 0) {
/* they had their chance, now kill them */
diff --git a/gdk/gdk_value.c b/gdk/gdk_value.c
--- a/gdk/gdk_value.c
+++ b/gdk/gdk_value.c
@@ -157,7 +157,8 @@ VALcopy(ValPtr d, const ValRecord *s)
d->vtype = s->vtype;
d->len = ATOMlen(d->vtype, p);
d->val.pval = GDKmalloc(d->len);
- memcpy(d->val.pval, p, d->len);
+ if( d->val.pval)
+ memcpy(d->val.pval, p, d->len);
}
return d;
}
@@ -208,7 +209,8 @@ VALinit(ValPtr d, int tpe, const void *s
assert(ATOMextern(ATOMstorage(tpe)));
d->len = ATOMlen(tpe, s);
d->val.pval = GDKmalloc(d->len);
- memcpy(d->val.pval, s, d->len);
+ if( d->val.pval)
+ memcpy(d->val.pval, s, d->len);
break;
}
return d;
diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -336,7 +336,10 @@ DFLOWworker(void *T)
srand((unsigned int) GDKusec());
#endif
GDKsetbuf(GDKmalloc(GDKMAXERRLEN)); /* where to leave errors */
- GDKerrbuf[0] = 0;
+ if( GDKerrbuf == 0)
+ fprintf(stderr,"DFLOWworker:Could not allocate GDKerrbuf\n");
+ else
+ GDKerrbuf[0] = 0;
MT_lock_set(&dataflowLock);
cntxt = t->cntxt;
MT_lock_unset(&dataflowLock);
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
@@ -272,7 +272,7 @@ printCall(Client cntxt, MalBlkPtr mb, Ma
{
str msg;
msg = instruction2str(mb, stk, getInstrPtr(mb, pc), LIST_MAL_CALL);
- mnstr_printf(cntxt->fdout, "#%s at %s.%s[%d]\n", msg,
+ mnstr_printf(cntxt->fdout, "#%s at %s.%s[%d]\n", (msg?msg:"failed
instruction2str()") ,
getModuleId(getInstrPtr(mb, 0)),
getFunctionId(getInstrPtr(mb, 0)), pc);
GDKfree(msg);
@@ -287,7 +287,7 @@ printTraceCall(stream *out, MalBlkPtr mb
p = getInstrPtr(mb, pc);
msg = instruction2str(mb, stk, p, flags);
- mnstr_printf(out, "#%s%s\n", (mb->errors ? "!" : ""), msg);
+ mnstr_printf(out, "#%s%s\n", (mb->errors ? "!" : ""), msg?msg:"failed
instruction2str()");
GDKfree(msg);
}
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -398,6 +398,10 @@ cloneFunction(stream *out, Module scope,
printInstruction(out,mb,0,p,LIST_MAL_ALL);
#endif
new = newFunction(scope->name, proc->name, getSignature(proc)->token);
+ if( new == NULL){
+ fprintf(stderr,"cloneFunction() failed");
+ return NULL;
+ }
freeMalBlk(new->def);
new->def = copyMalBlk(proc->def);
/* now change the definition of the original proc */
@@ -498,7 +502,7 @@ debugFunction(stream *fd, MalBlkPtr mb,
mnstr_printf(fd,"\n");
}
GDKfree(ps);
- }
+ } else mnstr_printf(fd,"#failed instruction2str()\n");
}
}
@@ -529,7 +533,7 @@ listFunction(stream *fd, MalBlkPtr mb, M
if (l > len)
len = l;
GDKfree(ps);
- }
+ } else mnstr_printf(fd,"#failed instruction2str()\n");
}
mnstr_printf(fd, "%% " SZFMT " # length\n", len);
}
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -290,8 +290,10 @@ evalFile(Client c, str fname, int listin
c->yycur = 0;
c->bak = NULL;
MSinitClientPrg(c, "user", "main"); /*
re-initialize context */
- MCpushClientInput(c, bstream_create(fd, 128 * BLOCK),
c->listing, "");
- msg = runScenario(c);
+ if( MCpushClientInput(c, bstream_create(fd, 128 *
BLOCK), c->listing, "") < 0){
+ msg = createException(MAL,"mal.eval", "WARNING:
could not switch client input stream\n");
+ } else
+ msg = runScenario(c);
if (msg != MAL_SUCCEED) {
dumpExceptionsToStream(c->fdout, msg);
GDKfree(msg);
@@ -309,8 +311,10 @@ evalFile(Client c, str fname, int listin
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list