}
cprintf("trap %d from cpu %d eip %x\n", v, cpu(), tf->eip);
- if(curproc[cpu()])
+ if(curproc[cpu()]) {
cprintf("pid %d\n", curproc[cpu()]->pid);
+ proc_exit();
+ }
// panic("trap");
return;
{
Header *bp, *p;
- printf(1, "free\n");
-
bp = (Header *) ap - 1;
for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
if (p >= p->s.ptr && (bp > p || bp < p->s.ptr))
if (nu < PAGE)
nu = PAGE;
- printf(1, "call sbrk\n");
cp = sbrk(nu * sizeof(Header));
if (cp == (char *) -1)
return 0;
Header *p, *prevp;
uint nunits;
- printf(1, "malloc %d\n", nbytes);
-
nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
if ((prevp = freep) == 0) {
base.s.ptr = freep = prevp = &base;
p->s.size = nunits;
}
freep = prevp;
- printf(1, "malloc returns: %d\n", (int) (p+1));
return (void *) (p + 1);
}
if (p == freep)
void
mem(void)
{
- void *m = malloc(4096);
void *m1, *m2;
- free(m + 3*1024);
- free(m + 2*1024);
- free(m + 1024);
- free(m);
- m1 = malloc(4096);
- if (m1 != m) {
- puts("didn't coalesce\n");
- exit();
- }
- free(m1);
-
m1 = 0;
while ((m2 = malloc(1024)) != 0) {
*(char **) m2 = m1;