On Thu, Aug 21, 2008 at 03:40, Jeff King <peff@xxxxxxxx> wrote: > 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. Thanks for the fix/workaround! > I am not convinced this is the right solution. Specifically: > > - there are a few other calls to ferror. Maybe they should be > converted, too, which implies that perhaps there is a better idiom > for checking this. Well, perhaps something like this can work around the issue for tig-0.12: bool check_ferror(FILE *file) { return ferror(file) && errno != 0; } For a possible "better" fix, I have been working on moving tig to use the run-command.[ch] code from git, which means that ferror() will no longer be needed. It is still not ready but looks promising. > - I have no idea how portable this is. Do all stdio implementations > fail to restart on signal? Do they all set ferror and have errno == > 0 (I would have expected EINTR, or at the very least a 0-read > without ferror set)? > > But it works for me (Linux, glibc 2.7). I have tested it on FreeBSD which doesn't seem to have this problem with ferror(). Anyway, the workaround doesn't break anything so applied. -- Jonas Fonseca -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html