From ab3624c2901007e991efc9624fa8d55c0b15013f Mon Sep 17 00:00:00 2001 From: Mohamed Elawadi Date: Fri, 16 Sep 2016 16:24:58 +0200 Subject: [PATCH] call winch_block inside shingetline only if needed --- Src/input.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Src/input.c b/Src/input.c index eb968ea..7de4e76 100644 --- a/Src/input.c +++ b/Src/input.c @@ -142,17 +142,24 @@ shingetline(void) char buf[BUFSIZ]; char *p; int q = queue_signal_level(); + int winch_blocked = 1; p = buf; for (;;) { - winch_unblock(); + if (winch_blocked) { + winch_unblock(); + winch_blocked = 0; + } dont_queue_signals(); do { errno = 0; c = fgetc(bshin); } while (c < 0 && errno == EINTR); if (c < 0 || c == '\n') { - winch_block(); + if (! winch_blocked) { + winch_block(); + winch_blocked = 1; + } restore_queue_signals(q); if (c == '\n') *p++ = '\n'; @@ -169,7 +176,10 @@ shingetline(void) } else *p++ = c; if (p >= buf + BUFSIZ - 1) { - winch_block(); + if (! winch_blocked) { + winch_block(); + winch_blocked = 1; + } queue_signals(); line = zrealloc(line, ll + (p - buf) + 1); memcpy(line + ll, buf, p - buf); -- 2.5.0