On Tue, 28 Jun 2022, Dan Cross wrote:
[...]
void*
_threadmalloc(long size, int z)
{
void *m;
m = malloc(size);
if (m == nil)
sysfatal("Malloc of size %ld failed: %r", size);
setmalloctag(m, getcallerpc(&size));
totalmalloc += size;
if (size > 100000000) {
fprint(2, "Malloc of size %ld, total %ld\n", size,
totalmalloc);
abort();
}
if (z)
memset(m, 0, size);
return m;
}
[...]
Shouldn't the if statement test the size of totalmalloc before the
abort? That size, 100M for internal allocations? It has to be
totalmalloc, doesn't it? If not this if statement should be after
testing the success of the malloc. Am I missing something?
Note that the `if` statement doesn't test the size of *totalmalloc*, but
just `size`. `totalsize` is only incidentally printed in the output if `size`
exceeds 100 MB: that is, if a single allocation is larger than 100MB.
I know, what called my attention is that size wasn't tested before
calling malloc, so the first thought I had was that the code had
a typo and it should be testing totalmalloc instead.
I mean, I think using libthread more like using small channels and thread's
stack sizes, but:
Why put a limit here to size when totalmalloc could continue to grow until
malloc fails?
If we want a limit, why don't we take into account the system resources?
If we want a constant limit, why don't we put it on threadimpl.h, explain why
this value in a comment
and document it in thread(2)?
Why bother to call malloc before testing if size exeeds that limit???
Given the name of the function (`_threadmalloc`), I'd guess that this isn't
intended for general use, but rather, for the internal consumption of the
thread library, where indeed such a large allocation would likely be an
error (bear in mind this code was developed on 32-bit machines with RAMs
measured in Megabytes, not Gigabytes).
No, it's used also when creating a channel and setting a thread's
stack size.
adr
------------------------------------------
9fans: 9fans
Permalink:
https://9fans.topicbox.com/groups/9fans/Te1be8dc72738258d-Mcbc484781129f693c26365ef
Delivery options: https://9fans.topicbox.com/groups/9fans/subscription