Code

Continue updates when pipe read has errno "Success"
authorJeff King <peff@peff.net>
Thu, 21 Aug 2008 01:40:44 +0000 (21:40 -0400)
committerJonas Fonseca <fonseca@diku.dk>
Fri, 22 Aug 2008 09:43:34 +0000 (11:43 +0200)
When we are reading from a pipe and receive a signal, our
read call fails and ferror() returns true. The current
behavior is to call end_update and report failure. However,
we can detect this situation by checking that errno is set
to success and continue the reading process.

You can provoke this behavior by running a "tig blame" that
takes a few seconds and then resizing the terminal that tig
is running in (you should get an incomplete blame output and
the error "Failed to read: Success").

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Jonas Fonseca <fonseca@diku.dk>
tig.c

diff --git a/tig.c b/tig.c
index 6b111e43a3fede913e60ca16493eb39dfc60e338..8362ecf39b13c2cbc62b98cde24165e8cfb52fe3 100644 (file)
--- a/tig.c
+++ b/tig.c
@@ -2392,7 +2392,7 @@ update_view(struct view *view)
        update_view_title(view);
 
 check_pipe:
-       if (ferror(view->pipe)) {
+       if (ferror(view->pipe) && errno != 0) {
                report("Failed to read: %s", strerror(errno));
                end_update(view, TRUE);