Changeset: 149fe30e6766 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/149fe30e6766 Modified Files: gdk/gdk.h gdk/gdk_bat.c gdk/gdk_logger.c Branch: default Log Message:
Fix some data races. diffs (96 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -726,8 +726,8 @@ typedef struct { uint16_t width; /* byte-width of the atom array */ int8_t type; /* type id. */ uint8_t shift; /* log2 of bun width */ - bool varsized:1, /* varsized/void (true) or fixedsized (false) */ - key:1, /* no duplicate values present */ + bool varsized; /* varsized/void (true) or fixedsized (false) */ + bool key:1, /* no duplicate values present */ nonil:1, /* there are no nils in the column */ nil:1, /* there is a nil in the column */ sorted:1, /* column is sorted in ascending order */ diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1027,7 +1027,9 @@ BUNappendmulti(BAT *b, const void *value return GDK_FAIL; } + MT_lock_set(&b->theaplock); ALIGNapp(b, force, GDK_FAIL); + MT_lock_unset(&b->theaplock); if (b->ttype == TYPE_void && BATtdense(b)) { const oid *ovals = values; @@ -1400,20 +1402,21 @@ BUNdelete(BAT *b, oid o) static gdk_return BUNinplacemulti(BAT *b, const oid *positions, const void *values, BUN count, bool force, bool autoincr) { - BUN last = BATcount(b) - 1; - BATiter bi = bat_iterator_nolock(b); int tt; BUN prv, nxt; const void *val; + MT_lock_set(&b->theaplock); + BUN last = BATcount(b) - 1; + BATiter bi = bat_iterator_nolock(b); /* zap alignment info */ if (!force && (b->batRestricted != BAT_WRITE || b->batSharecnt > 0)) { + MT_lock_unset(&b->theaplock); GDKerror("access denied to %s, aborting.\n", BATgetId(b)); return GDK_FAIL; } TRC_DEBUG(ALGO, ALGOBATFMT " replacing " BUNFMT " values\n", ALGOBATPAR(b), count); - MT_lock_set(&b->theaplock); if (b->ttype == TYPE_void) { PROPdestroy(b); b->tminpos = BUN_NONE; diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2915,19 +2915,26 @@ log_tstart(logger *lg, bool flushnow) { logformat l; + logger_lock(lg); if (flushnow) { lg->id++; logger_close_output(lg); /* start new file */ - if (logger_open_output(lg) != GDK_SUCCEED) + if (logger_open_output(lg) != GDK_SUCCEED) { + logger_unlock(lg); return GDK_FAIL; - while (lg->saved_id+1 < lg->id) + } + while (lg->saved_id+1 < lg->id) { + logger_unlock(lg); logger_flush(lg, (1ULL<<63)); + logger_lock(lg); + } lg->flushnow = flushnow; } lg->end++; if (LOG_DISABLED(lg)) { + logger_unlock(lg); return GDK_SUCCEED; } @@ -2936,7 +2943,10 @@ log_tstart(logger *lg, bool flushnow) if (lg->debug & 1) fprintf(stderr, "#log_tstart %d\n", lg->tid); - if (log_write_format(lg, &l) != GDK_SUCCEED) + if (log_write_format(lg, &l) != GDK_SUCCEED) { + logger_unlock(lg); return GDK_FAIL; + } + logger_unlock(lg); return GDK_SUCCEED; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org