提交 e0240674 创建 作者: rsc's avatar rsc

make kfree loop same as kalloc

上级 7bb73cdb
...@@ -93,20 +93,17 @@ char* ...@@ -93,20 +93,17 @@ char*
kalloc(int n) kalloc(int n)
{ {
char *p; char *p;
struct run *r, **rr; struct run *r, **rp;
if(n % PAGE || n <= 0) if(n % PAGE || n <= 0)
panic("kalloc"); panic("kalloc");
acquire(&kalloc_lock); acquire(&kalloc_lock);
for(rp=&freelist; (r=*rp) != 0; rp=&r->next){
rr = &freelist;
while(*rr){
r = *rr;
if(r->len == n){ if(r->len == n){
*rr = r->next; *rp = r->next;
release(&kalloc_lock); release(&kalloc_lock);
return (char*) r; return (char*)r;
} }
if(r->len > n){ if(r->len > n){
r->len -= n; r->len -= n;
...@@ -114,9 +111,9 @@ kalloc(int n) ...@@ -114,9 +111,9 @@ kalloc(int n)
release(&kalloc_lock); release(&kalloc_lock);
return p; return p;
} }
rr = &(*rr)->next;
} }
release(&kalloc_lock); release(&kalloc_lock);
cprintf("kalloc: out of memory\n"); cprintf("kalloc: out of memory\n");
return 0; return 0;
} }
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论