. also make other out-of-memory conditions less fatal . add a test case for a user program using all the memory it can . remove some diagnostic prints for situations that are normal when running out of memory so running the test isn't noisy
		
			
				
	
	
		
			49 lines
		
	
	
		
			779 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			779 B
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
/* Code to test reasonable response to out-of-memory condition
 | 
						|
 * of regular processes.
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <dlfcn.h>
 | 
						|
 | 
						|
#include <sys/mman.h>
 | 
						|
#include <sys/wait.h>
 | 
						|
 | 
						|
#define MAX_ERROR 2
 | 
						|
 | 
						|
#include "magic.h"
 | 
						|
#include "common.c"
 | 
						|
 | 
						|
int main (int argc, char *argv[])
 | 
						|
{
 | 
						|
  pid_t f;
 | 
						|
  start(64);
 | 
						|
#define NADDRS 500
 | 
						|
#define LEN 4096
 | 
						|
  static void *addrs[NADDRS];
 | 
						|
  int i = 0;
 | 
						|
  int st;
 | 
						|
 | 
						|
  if((f=fork()) == -1) {
 | 
						|
  	e(1);
 | 
						|
	exit(1);
 | 
						|
  }
 | 
						|
 | 
						|
  if(f == 0) {
 | 
						|
  	/* child: use up as much memory as we can */
 | 
						|
	while((addrs[i++ % NADDRS] = minix_mmap(0, LEN, PROT_READ|PROT_WRITE,
 | 
						|
		MAP_PREALLOC|MAP_CONTIG|MAP_ANON, -1, 0)) != MAP_FAILED)
 | 
						|
			;
 | 
						|
	exit(0);
 | 
						|
  }
 | 
						|
 | 
						|
  /* parent: wait for child */
 | 
						|
  if(waitpid(f, &st, 0) < 0) 
 | 
						|
	perror("waitpid");
 | 
						|
 | 
						|
  quit();
 | 
						|
 | 
						|
  return(0);
 | 
						|
}
 |