handle another out-of-memory in fork(). the policy here is not consistent,
since other calls (e.g. exec()) panic on out of memory.
This commit is contained in:
parent
4c22c54480
commit
adee82c3e7
|
@ -161,6 +161,8 @@ proc_pagetable(struct proc *p)
|
|||
|
||||
// An empty page table.
|
||||
pagetable = uvmcreate();
|
||||
if(pagetable == 0)
|
||||
return 0;
|
||||
|
||||
// map the trampoline code (for system call return)
|
||||
// at the highest user virtual address.
|
||||
|
|
|
@ -195,13 +195,14 @@ uvmunmap(pagetable_t pagetable, uint64 va, uint64 npages, int do_free)
|
|||
}
|
||||
|
||||
// create an empty user page table.
|
||||
// returns 0 if out of memory.
|
||||
pagetable_t
|
||||
uvmcreate()
|
||||
{
|
||||
pagetable_t pagetable;
|
||||
pagetable = (pagetable_t) kalloc();
|
||||
if(pagetable == 0)
|
||||
panic("uvmcreate: out of memory");
|
||||
return 0;
|
||||
memset(pagetable, 0, PGSIZE);
|
||||
return pagetable;
|
||||
}
|
||||
|
|
|
@ -2507,6 +2507,8 @@ main(int argc, char *argv[])
|
|||
|
||||
if(argc == 2 && strcmp(argv[1], "-c") == 0){
|
||||
continuous = 1;
|
||||
} else if(argc == 2 && strcmp(argv[1], "-C") == 0){
|
||||
continuous = 2;
|
||||
} else if(argc == 2 && argv[1][0] != '-'){
|
||||
justone = argv[1];
|
||||
} else if(argc > 1){
|
||||
|
@ -2589,11 +2591,13 @@ main(int argc, char *argv[])
|
|||
}
|
||||
if(fail){
|
||||
printf("SOME TESTS FAILED\n");
|
||||
if(continuous != 2)
|
||||
exit(1);
|
||||
}
|
||||
int free1 = countfree();
|
||||
if(free1 < free0){
|
||||
printf("FAILED -- lost some free pages\n");
|
||||
if(continuous != 2)
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue