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; | ||||
|         } | ||||
|         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…
	
	Add table
		Add a link
		
	
		Reference in a new issue