It seems that the kernel heap dump code ("kh") is missing a check and
so it asserts if you hit a page with no free entries on it.
Patch:
Index: src/kern/lib/kheap.c
===================================================================
RCS file: /disk/disk0/cs161/CVSREPO/os161/src/kern/lib/kheap.c,v
retrieving revision 1.15
diff -u -r1.15 kheap.c
--- kheap.c 29 Aug 2002 19:43:19 -0000 1.15
+++ kheap.c 21 Apr 2003 22:43:25 -0000
@@ -259,14 +259,16 @@
n = PAGE_SIZE / sizes[blktype];
assert(n <= 32*sizeof(freemap)/sizeof(freemap[0]));
- fla = prpage + pr->freelist_offset;
- fl = (struct freelist *)fla;
+ if (pr->freelist_offset != INVALID_OFFSET) {
+ fla = prpage + pr->freelist_offset;
+ fl = (struct freelist *)fla;
- for (; fl != NULL; fl = fl->next) {
- fla = (vaddr_t)fl;
- index = (fla-prpage) / sizes[blktype];
- assert(index<n);
- freemap[index/32] |= (1<<(index%32));
+ for (; fl != NULL; fl = fl->next) {
+ fla = (vaddr_t)fl;
+ index = (fla-prpage) / sizes[blktype];
+ assert(index<n);
+ freemap[index/32] |= (1<<(index%32));
+ }
}
kprintf("at 0x%08lx: size %-4lu %u/%u free\n",
--
- David A. Holland / dholland(a)eecs.harvard.edu
Show replies by date