summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <rsc>2007-08-27 12:50:36 +0000
committerrsc <rsc>2007-08-27 12:50:36 +0000
commite0240674f5b30adf92714162cf51dabc43b17aa7 (patch)
treea086bb3c675757d287c6171fbba111a4dd50e009
parent7bb73cdbc78a1f0df07539125e681c084b66d876 (diff)
downloadxv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.tar.gz
xv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.tar.bz2
xv6-labs-e0240674f5b30adf92714162cf51dabc43b17aa7.zip
make kfree loop same as kalloc
-rw-r--r--kalloc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/kalloc.c b/kalloc.c
index 4125527..eb78212 100644
--- a/kalloc.c
+++ b/kalloc.c
@@ -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;
}