diff options
author | rsc <rsc> | 2007-08-27 12:50:36 +0000 |
---|---|---|
committer | rsc <rsc> | 2007-08-27 12:50:36 +0000 |
commit | e0240674f5b30adf92714162cf51dabc43b17aa7 (patch) | |
tree | a086bb3c675757d287c6171fbba111a4dd50e009 | |
parent | 7bb73cdbc78a1f0df07539125e681c084b66d876 (diff) | |
download | xv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.tar.gz xv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.tar.bz2 xv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.zip |
make kfree loop same as kalloc
-rw-r--r-- | kalloc.c | 13 |
1 files changed, 5 insertions, 8 deletions
@@ -93,20 +93,17 @@ char* kalloc(int n) { char *p; - struct run *r, **rr; + struct run *r, **rp; if(n % PAGE || n <= 0) panic("kalloc"); acquire(&kalloc_lock); - - rr = &freelist; - while(*rr){ - r = *rr; + for(rp=&freelist; (r=*rp) != 0; rp=&r->next){ if(r->len == n){ - *rr = r->next; + *rp = r->next; release(&kalloc_lock); - return (char*) r; + return (char*)r; } if(r->len > n){ r->len -= n; @@ -114,9 +111,9 @@ kalloc(int n) release(&kalloc_lock); return p; } - rr = &(*rr)->next; } release(&kalloc_lock); + cprintf("kalloc: out of memory\n"); return 0; } |