nix repl: Fix Ctrl-C
This commit is contained in:
		
							parent
							
								
									23aa1619da
								
							
						
					
					
						commit
						6734c18c99
					
				
					 1 changed files with 10 additions and 0 deletions
				
			
		|  | @ -217,6 +217,13 @@ bool NixRepl::getLine(string & input, const char * prompt) | |||
|     if (sigaction(SIGINT, &act, &old)) | ||||
|         throw SysError("installing handler for SIGINT"); | ||||
| 
 | ||||
|     static sigset_t savedSignalMask, set; | ||||
|     sigemptyset(&set); | ||||
|     sigaddset(&set, SIGINT); | ||||
| 
 | ||||
|     if (sigprocmask(SIG_UNBLOCK, &set, &savedSignalMask)) | ||||
|         throw SysError("unblocking SIGINT"); | ||||
| 
 | ||||
|     if (sigsetjmp(sigintJmpBuf, 1)) { | ||||
|         input.clear(); | ||||
|     } else { | ||||
|  | @ -236,6 +243,9 @@ bool NixRepl::getLine(string & input, const char * prompt) | |||
| 
 | ||||
|     _isInterrupted = 0; | ||||
| 
 | ||||
|     if (sigprocmask(SIG_SETMASK, &savedSignalMask, nullptr)) | ||||
|         throw SysError("restoring signals"); | ||||
| 
 | ||||
|     if (sigaction(SIGINT, &old, 0)) | ||||
|         throw SysError("restoring handler for SIGINT"); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue