From 95a2b7612306574d575a07babb5614aa2fda2566 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 14 Jun 2019 10:12:47 +0200 Subject: Make the log callback atomic. Use a single call to write the entire line to stderr. Avoids mixed lines with e.g. multi-component runs --- src/maximal_slicing_axi_mg.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c index a3f8578..39cb1f3 100644 --- a/src/maximal_slicing_axi_mg.c +++ b/src/maximal_slicing_axi_mg.c @@ -188,10 +188,17 @@ static void log_callback(const MG2DContext *ctx, int level, { MSMGContext *ms = ctx->opaque; int target_level = ms->log_level; + uint8_t buf[1024]; + int ret; + if (level > target_level) return; - fprintf(stderr, "[%d] t=%g ", ctz(ms->gh->cctk_levfac[0]), ms->gh->cctk_time); - vfprintf(stderr, fmt, vl); + + ret = snprintf(buf, sizeof(buf), "[%d] t=%g ", ctz(ms->gh->cctk_levfac[0]), ms->gh->cctk_time); + if (ret >= sizeof(buf)) + return; + vsnprintf(buf + ret, sizeof(buf) - ret, fmt, vl); + fputs(buf, stderr); } static MG2DContext *solver_alloc(MSMGContext *ms, int level, -- cgit v1.2.3