Report daemon OOM better
When copying a large path causes the daemon to run out of memory, you now get: error: Nix daemon out of memory instead of: error: writing to file: Broken pipe
This commit is contained in:
		
							parent
							
								
									829af22759
								
							
						
					
					
						commit
						b1beed97a0
					
				
					 2 changed files with 19 additions and 9 deletions
				
			
		|  | @ -402,11 +402,23 @@ Path RemoteStore::addToStore(const Path & _srcPath, | |||
|     writeInt((hashAlgo == htSHA256 && recursive) ? 0 : 1, to); | ||||
|     writeInt(recursive ? 1 : 0, to); | ||||
|     writeString(printHashType(hashAlgo), to); | ||||
| 
 | ||||
|     try { | ||||
|         to.written = 0; | ||||
|         to.warn = true; | ||||
|         dumpPath(srcPath, to, filter); | ||||
|         to.warn = false; | ||||
|         processStderr(); | ||||
|     } catch (SysError & e) { | ||||
|         /* Daemon closed while we were sending the path. Probably OOM
 | ||||
|            or I/O error. */ | ||||
|         if (e.errNo == EPIPE) | ||||
|             try { | ||||
|                 processStderr(); | ||||
|             } catch (EndOfFile & e) { } | ||||
|         throw; | ||||
|     } | ||||
| 
 | ||||
|     return readStorePath(from); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -735,11 +735,9 @@ static void processConnection(bool trusted) | |||
|                during addTextToStore() / importPath().  If that | ||||
|                happens, just send the error message and exit. */ | ||||
|             bool errorAllowed = canSendStderr; | ||||
|             if (!errorAllowed) printMsg(lvlError, format("error processing client input: %1%") % e.msg()); | ||||
|             stopWork(false, e.msg(), GET_PROTOCOL_MINOR(clientVersion) >= 8 ? e.status : 0); | ||||
|             if (!errorAllowed) break; | ||||
|             if (!errorAllowed) throw; | ||||
|         } catch (std::bad_alloc & e) { | ||||
|             if (canSendStderr) | ||||
|             stopWork(false, "Nix daemon out of memory", GET_PROTOCOL_MINOR(clientVersion) >= 8 ? 1 : 0); | ||||
|             throw; | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue