| 378 | } |
| 379 | |
| 380 | void *malloc(size_t size) { |
| 381 | struct call *c; |
| 382 | struct memblock *b; |
| 383 | struct thread_info *ti; |
| 384 | |
| 385 | init(); |
| 386 | if (in_init) |
| 387 | return dl_malloc(size); |
| 388 | |
| 389 | ti = get_thread_info(); |
| 390 | |
| 391 | b = dl_malloc(offsetof(struct memblock, mem) + size); |
| 392 | b->blocksize = size; |
| 393 | b->flags = 0; |
| 394 | b->ti = ti; |
| 395 | LOCK(&lk) { |
| 396 | c = get_call(); |
| 397 | b->place_allocated = c; |
| 398 | c->total_allocated += size; |
| 399 | listc_abl(&c->blocks, b); |
| 400 | listc_abl(&blocks, b); |
| 401 | listc_abl(&ti->blocks, b); |
| 402 | } UNLOCK(&lk); |
| 403 | return b->mem; |
| 404 | } |
| 405 | |
| 406 | void *calloc(size_t nelem, size_t elsize) { |
| 407 | struct call *c; |