svn commit: r282948 - head/lib/libthr/thread
Rui Paulo
rpaulo at me.com
Sat May 16 02:31:45 UTC 2015
On Friday 15 May 2015 08:40:17 Konstantin Belousov wrote:
> Author: kib
> Date: Fri May 15 08:40:17 2015
> New Revision: 282948
> URL: https://svnweb.freebsd.org/changeset/base/282948
>
> Log:
> Some third-party malloc(3) implementations use pthread_setspecific(3)
> to handle per-thread information. Since our pthread_setspecific()
> implementation calls calloc(3) to allocate per-thread specific data
> storage, things get complicated.
>
> Switch the allocator to use bare mmap(2). There is some loss of the
> allocated page, since e.g. on amd64, PTHREAD_KEYS_MAX * sizeof(struct
> pthread_specific_elem) is 3K (it actually spans whole page due to
> padding), but I believe it is more acceptable than additional code for
> specialized allocator().
>
> The alternatives would either to make the specific data array be part of
> the struct thread, or use internal bindings to call the libc malloc,
> avoiding interposing.
>
> Also do the style pass over the thr_spec.c, esp. simplify the
> conditionals nesting by returning early when an error detected.
> Remove trivial comments.
>
> Found by: yuri at rawbw.com
> PR: 200138
> Sponsored by: The FreeBSD Foundation
> MFC after: 2 weeks
Thanks! I think umem might be affected as well.
--
Rui Paulo
More information about the svn-src-head
mailing list