printMsg(): Don't check for interrupts
Having the logger function potentially throw exceptions is Heisenbuggy.
This commit is contained in:
parent
2e1493037b
commit
054be50257
3 changed files with 15 additions and 17 deletions
|
@ -60,14 +60,12 @@ void warnOnce(bool & haveWarned, const FormatOrString & fs)
|
|||
void writeToStderr(const string & s)
|
||||
{
|
||||
try {
|
||||
writeFull(STDERR_FILENO, s);
|
||||
writeFull(STDERR_FILENO, s, false);
|
||||
} catch (SysError & e) {
|
||||
/* Ignore failing writes to stderr if we're in an exception
|
||||
handler, otherwise throw an exception. We need to ignore
|
||||
write errors in exception handlers to ensure that cleanup
|
||||
code runs to completion if the other side of stderr has
|
||||
been closed unexpectedly. */
|
||||
if (!std::uncaught_exception()) throw;
|
||||
/* Ignore failing writes to stderr. We need to ignore write
|
||||
errors to ensure that cleanup code that logs to stderr runs
|
||||
to completion if the other side of stderr has been closed
|
||||
unexpectedly. */
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -474,24 +474,24 @@ void readFull(int fd, unsigned char * buf, size_t count)
|
|||
}
|
||||
|
||||
|
||||
void writeFull(int fd, const unsigned char * buf, size_t count)
|
||||
void writeFull(int fd, const unsigned char * buf, size_t count, bool allowInterrupts)
|
||||
{
|
||||
while (count) {
|
||||
checkInterrupt();
|
||||
ssize_t res = write(fd, (char *) buf, count);
|
||||
if (res == -1) {
|
||||
if (errno == EINTR) continue;
|
||||
if (res == -1 && errno != EINTR)
|
||||
throw SysError("writing to file");
|
||||
if (res > 0) {
|
||||
count -= res;
|
||||
buf += res;
|
||||
}
|
||||
count -= res;
|
||||
buf += res;
|
||||
if (allowInterrupts) checkInterrupt();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void writeFull(int fd, const string & s)
|
||||
void writeFull(int fd, const string & s, bool allowInterrupts)
|
||||
{
|
||||
writeFull(fd, (const unsigned char *) s.data(), s.size());
|
||||
writeFull(fd, (const unsigned char *) s.data(), s.size(), allowInterrupts);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -120,8 +120,8 @@ void replaceSymlink(const Path & target, const Path & link);
|
|||
/* Wrappers arount read()/write() that read/write exactly the
|
||||
requested number of bytes. */
|
||||
void readFull(int fd, unsigned char * buf, size_t count);
|
||||
void writeFull(int fd, const unsigned char * buf, size_t count);
|
||||
void writeFull(int fd, const string & s);
|
||||
void writeFull(int fd, const unsigned char * buf, size_t count, bool allowInterrupts = true);
|
||||
void writeFull(int fd, const string & s, bool allowInterrupts = true);
|
||||
|
||||
MakeError(EndOfFile, Error)
|
||||
|
||||
|
|
Loading…
Reference in a new issue