From 1e6e606f54537c732cce48e5d3eae7fc29281fe5 Mon Sep 17 00:00:00 2001 From: nicm Date: Tue, 7 Mar 2017 13:48:28 +0000 Subject: [PATCH] Need to flush before writing out cells we are not collecting, also add some extra logging. --- screen-write.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/screen-write.c b/screen-write.c index d9d37437..1af3b32f 100644 --- a/screen-write.c +++ b/screen-write.c @@ -1030,8 +1030,9 @@ screen_write_collect_flush(struct screen_write_ctx *ctx, int scroll_only) { struct screen *s = ctx->s; struct screen_write_collect_item *ci, *tmp; - u_int y, cx, cy; + u_int y, cx, cy, items = 0; struct tty_ctx ttyctx; + size_t written = 0; if (ctx->scrolled != 0) { log_debug("%s: scrolled %u (region %u-%u)", __func__, @@ -1056,13 +1057,18 @@ screen_write_collect_flush(struct screen_write_ctx *ctx, int scroll_only) ttyctx.ptr = ci->data; ttyctx.num = ci->used; tty_write(tty_cmd_cells, &ttyctx); - ctx->written += ci->used; + + items++; + written += ci->used; TAILQ_REMOVE(&ctx->list[y].items, ci, entry); free(ci); } } s->cx = cx; s->cy = cy; + + log_debug("%s: flushed %u items (%zu bytes)", __func__, items, written); + ctx->written += written; } /* Finish and store collected cells. */ @@ -1101,9 +1107,9 @@ screen_write_collect_add(struct screen_write_ctx *ctx, /* * Don't need to check that the attributes and whatnot are still the - * same - input_parse will do a flush when anything that isn't a plain - * character is encountered. Also nothing should make it here that - * isn't a single ASCII character. + * same - input_parse will end the collection when anything that isn't + * a plain character is encountered. Also nothing should make it here + * that isn't a single ASCII character. */ collect = 1; @@ -1119,6 +1125,7 @@ screen_write_collect_add(struct screen_write_ctx *ctx, collect = 0; if (!collect) { screen_write_collect_end(ctx); + screen_write_collect_flush(ctx, 0); screen_write_cell(ctx, gc); return; }