diff options
| author | Robert Morris <rtm@csail.mit.edu> | 2020-08-13 10:22:07 -0400 | 
|---|---|---|
| committer | Frans Kaashoek <kaashoek@mit.edu> | 2020-08-17 08:18:23 -0400 | 
| commit | 8dc71a257d80d1e2f56cd7f931ca389fbb727b5c (patch) | |
| tree | b29e38cd1aab2cb526dd657ba23d636a93401580 /kernel | |
| parent | bc51626aab45f420652f20948a1ffa5398ad9446 (diff) | |
| download | xv6-labs-8dc71a257d80d1e2f56cd7f931ca389fbb727b5c.tar.gz xv6-labs-8dc71a257d80d1e2f56cd7f931ca389fbb727b5c.tar.bz2 xv6-labs-8dc71a257d80d1e2f56cd7f931ca389fbb727b5c.zip | |
handle another out-of-memory in fork(). the policy here is not consistent,
since other calls (e.g. exec()) panic on out of memory.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/proc.c | 2 | ||||
| -rw-r--r-- | kernel/vm.c | 3 | 
2 files changed, 4 insertions, 1 deletions
| diff --git a/kernel/proc.c b/kernel/proc.c index 2811142..56314e5 100644 --- a/kernel/proc.c +++ b/kernel/proc.c @@ -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. diff --git a/kernel/vm.c b/kernel/vm.c index 92a5ff7..2f3789f 100644 --- a/kernel/vm.c +++ b/kernel/vm.c @@ -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;  } | 
