Changeset: 1d2f6665bc2d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d2f6665bc2d Modified Files: common/stream/stream.c gdk/gdk_imprints.c gdk/gdk_sample.c gdk/gdk_system.c monetdb5/mal/mal_function.c monetdb5/modules/kernel/microbenchmark.c monetdb5/modules/kernel/mmath.c sql/backends/monet5/bam/bam_wrapper.c sql/backends/monet5/sql.c sql/backends/monet5/sql_scenario.c tools/merovingian/client/monetdb.c tools/merovingian/daemon/connections.c tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/peering.c tools/merovingian/daemon/proxy.c Branch: default Log Message:
Merge with Oct2014 branch. diffs (truncated from 516 to 300 lines): diff --git a/common/stream/stream.c b/common/stream/stream.c --- a/common/stream/stream.c +++ b/common/stream/stream.c @@ -742,8 +742,9 @@ getFileSize(stream *s) if (s->read == file_read) { struct stat stb; - fstat(fileno((FILE *) s->stream_data.p), &stb); - return (size_t) stb.st_size; + if (fstat(fileno((FILE *) s->stream_data.p), &stb) == 0) + return (size_t) stb.st_size; + /* we shouldn't get here... */ } return 0; /* unknown */ } @@ -1690,11 +1691,11 @@ socket_read(stream *s, void *buf, size_t { ssize_t nr = 0, size = (ssize_t) (elmsize * cnt); - if (s->errnr || size == 0) + if (s->errnr) return -1; - if (size == 0) return 0; + #ifdef _MSC_VER /* recv only takes an int parameter, and read does not accept * sockets */ diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c --- a/gdk/gdk_imprints.c +++ b/gdk/gdk_imprints.c @@ -932,8 +932,9 @@ IMPSremove(BAT *b) if ((imprints = b->T->imprints) != NULL) { b->T->imprints = NULL; - HEAPdelete(imprints->imprints, BBP_physical(b->batCacheid), - b->batCacheid > 0 ? "timprints" : "himprints"); + if (HEAPdelete(imprints->imprints, BBP_physical(b->batCacheid), + b->batCacheid > 0 ? "timprints" : "himprints")) + IODEBUG THRprintf(GDKstdout, "#IMPSremove(%s): imprints heap\n", BATgetId(b)); GDKfree(imprints->imprints); GDKfree(imprints); diff --git a/gdk/gdk_sample.c b/gdk/gdk_sample.c --- a/gdk/gdk_sample.c +++ b/gdk/gdk_sample.c @@ -40,7 +40,12 @@ #undef BATsample +#ifdef STATIC_CODE_ANALYSIS +#define DRAND (0.5) +#else #define DRAND ((double)rand()/(double)RAND_MAX) +#endif + /* this is a straightforward implementation of a binary tree */ struct oidtreenode { diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -473,6 +473,28 @@ static struct posthread { } *posthreads = NULL; static pthread_mutex_t posthread_lock = PTHREAD_MUTEX_INITIALIZER; +static struct posthread * +find_posthread_locked(pthread_t tid) +{ + struct posthread *p; + + for (p = posthreads; p; p = p->next) + if (p->tid == tid) + return p; + return NULL; +} + +static struct posthread * +find_posthread(pthread_t tid) +{ + struct posthread *p; + + pthread_mutex_lock(&posthread_lock); + p = find_posthread_locked(tid); + pthread_mutex_unlock(&posthread_lock); + return p; +} + static void MT_thread_sigmask(sigset_t * new_mask, sigset_t * orig_mask) { @@ -483,18 +505,22 @@ MT_thread_sigmask(sigset_t * new_mask, s #endif static void -rm_posthread(struct posthread *p, int lock) +rm_posthread_locked(struct posthread *p) { struct posthread **pp; - if (lock) - pthread_mutex_lock(&posthread_lock); for (pp = &posthreads; *pp && *pp != p; pp = &(*pp)->next) ; if (*pp) *pp = p->next; - if (lock) - pthread_mutex_unlock(&posthread_lock); +} + +static void +rm_posthread(struct posthread *p) +{ + pthread_mutex_lock(&posthread_lock); + rm_posthread_locked(p); + pthread_mutex_unlock(&posthread_lock); } static void @@ -522,10 +548,14 @@ join_threads(void) n = p->next; if (p->exited) { tid = p->tid; - rm_posthread(p, 0); pthread_mutex_unlock(&posthread_lock); pthread_join(tid, NULL); pthread_mutex_lock(&posthread_lock); + /* find the thread again, mostly to + * keep Coverity happy */ + p = find_posthread_locked(tid); + assert(p != NULL); + rm_posthread_locked(p); free(p); waited = 1; break; @@ -578,7 +608,7 @@ MT_create_thread(MT_Id *t, void (*f) (vo *t = (MT_Id) (((size_t) *newtp) + 1); /* use pthread-id + 1 */ #endif } else if (p) { - rm_posthread(p, 1); + rm_posthread(p); free(p); } #ifdef HAVE_PTHREAD_SIGMASK @@ -587,26 +617,16 @@ MT_create_thread(MT_Id *t, void (*f) (vo return ret; } -static struct posthread * -find_posthread(pthread_t tid) -{ - struct posthread *p; - - pthread_mutex_lock(&posthread_lock); - for (p = posthreads; p; p = p->next) - if (p->tid == tid) - break; - pthread_mutex_unlock(&posthread_lock); - return p; -} - void MT_exiting_thread(void) { struct posthread *p; + pthread_t tid = pthread_self(); - if ((p = find_posthread(pthread_self())) != NULL) + pthread_mutex_lock(&posthread_lock); + if ((p = find_posthread_locked(tid)) != NULL) p->exited = 1; + pthread_mutex_unlock(&posthread_lock); } void 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 @@ -1009,7 +1009,7 @@ showFlowGraph(MalBlkPtr mb, MalStkPtr st } else if (f != GDKout) { if (!stethoscope ) { MT_sleep_ms(4000); /* delay for stethoscope */ - mnstr_close(f); + close_stream(f); } } } diff --git a/monetdb5/modules/kernel/microbenchmark.c b/monetdb5/modules/kernel/microbenchmark.c --- a/monetdb5/modules/kernel/microbenchmark.c +++ b/monetdb5/modules/kernel/microbenchmark.c @@ -32,6 +32,10 @@ #include <mal_exception.h> #include "microbenchmark.h" +#ifdef STATIC_CODE_ANALYSIS +#define rand() 0 +#endif + static int BATrandom(BAT **bn, oid *base, wrd *size, int *domain, int seed) { diff --git a/monetdb5/modules/kernel/mmath.c b/monetdb5/modules/kernel/mmath.c --- a/monetdb5/modules/kernel/mmath.c +++ b/monetdb5/modules/kernel/mmath.c @@ -275,8 +275,11 @@ MATHunary_FINITE(bit *res, const dbl *a) str MATHrandint(int *res) { - /* coverity[dont_call] */ +#ifdef STATIC_CODE_ANALYSIS + *res = 0; +#else *res = rand(); +#endif return MAL_SUCCEED; } @@ -284,8 +287,11 @@ str MATHrandintarg(int *res, const int *dummy) { (void) dummy; - /* coverity[dont_call] */ +#ifdef STATIC_CODE_ANALYSIS + *res = 0; +#else *res = rand(); +#endif return MAL_SUCCEED; } @@ -301,8 +307,11 @@ str MATHsqlrandint(int *res, const int *seed) { srand(*seed); - /* coverity[dont_call] */ +#ifdef STATIC_CODE_ANALYSIS + *res = 0; +#else *res = rand(); +#endif return MAL_SUCCEED; } diff --git a/sql/backends/monet5/bam/bam_wrapper.c b/sql/backends/monet5/bam/bam_wrapper.c --- a/sql/backends/monet5/bam/bam_wrapper.c +++ b/sql/backends/monet5/bam/bam_wrapper.c @@ -942,11 +942,12 @@ process_header(bam_wrapper * bw) rg_fields_found[11]); /* if this point is reached, option wasn't recognized */ - clear_bam_header_line(&hl); - throw(MAL, "process_header", + msg = createException(MAL, "process_header", ERR_PROCESS_HEADER "Unknown option '%s' found in header tag RG", bw->file_location, hl.options[o].tag); + clear_bam_header_line(&hl); + return msg; } if (!rg_fields_found[0]) { clear_bam_header_line(&hl); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -2782,26 +2782,33 @@ mvc_import_table_wrap(Client cntxt, MalB GDKfree(rsep); throw(MAL, "sql.copy_from", MAL_MALLOC_FAIL); } - GDKstrFromStr(ssep = GDKmalloc(len + 1), *S, len); + GDKstrFromStr(ssep, *S, len); len = 0; } /* convert UTF-8 encoded file name to the character set of our * own locale before passing it on to the system call */ - if ((msg = STRcodeset(&cs)) != MAL_SUCCEED || - (msg = STRIconv(&filename, fname, &utf8, &cs)) != MAL_SUCCEED) { + if ((msg = STRcodeset(&cs)) != MAL_SUCCEED) { GDKfree(tsep); GDKfree(rsep); GDKfree(ssep); return msg; } - + msg = STRIconv(&filename, fname, &utf8, &cs); GDKfree(cs); + if (msg != MAL_SUCCEED) { + GDKfree(tsep); + GDKfree(rsep); + GDKfree(ssep); + return msg; + } + len = strlen((char *) (*N)); if ((ns = GDKmalloc(len + 1)) == NULL) { GDKfree(tsep); GDKfree(rsep); GDKfree(ssep); + GDKfree(filename); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list