Slightly safer OOM killer disablement in linux
This commit is contained in:
		
							parent
							
								
									754195f8d7
								
							
						
					
					
						commit
						0edbd2e016
					
				
							
								
								
									
										13
									
								
								slock.c
								
								
								
								
							
							
						
						
									
										13
									
								
								slock.c
								
								
								
								
							| 
						 | 
				
			
			@ -60,16 +60,27 @@ die(const char *errstr, ...)
 | 
			
		|||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <linux/oom.h>
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
dontkillme(void)
 | 
			
		||||
{
 | 
			
		||||
	int fd;
 | 
			
		||||
	int length;
 | 
			
		||||
	char value[64];
 | 
			
		||||
 | 
			
		||||
	fd = open("/proc/self/oom_score_adj", O_WRONLY);
 | 
			
		||||
	if (fd < 0 && errno == ENOENT)
 | 
			
		||||
		return;
 | 
			
		||||
	if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0)
 | 
			
		||||
 | 
			
		||||
	/* convert OOM_SCORE_ADJ_MIN to string for writing */
 | 
			
		||||
	length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN);
 | 
			
		||||
 | 
			
		||||
	/* bail on truncation */
 | 
			
		||||
	if (length >= sizeof(value))
 | 
			
		||||
		die("buffer too small\n");
 | 
			
		||||
 | 
			
		||||
	if (fd < 0 || write(fd, value, length) != length || close(fd) != 0)
 | 
			
		||||
		die("cannot disable the out-of-memory killer for this process\n");
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue