diff options
| -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;  }  | 
