diff options
| author | christos <christos@NetBSD.org> | 2019-03-05 01:35:52 +0000 |
|---|---|---|
| committer | christos <christos@NetBSD.org> | 2019-03-05 01:35:52 +0000 |
| commit | 03bbc0809832cfc64ebef984c1dae5d64c95bfca (patch) | |
| tree | 11c70e20854dd6c80f39bb8826532c3af2e9134b /lib/libc/include/tsd.h | |
| parent | 9dc824f400679beae5c68745c5200ca0478a7c3d (diff) | |
Transfer all the keys that were created in the libc stub implementation
to the pthread tsd implementation when the main thread is created.
This corrects a problem where a process created keys before libpthread
was loaded (either from the libc constructor or because libpthread
was dlopened later). This fixes a problem with jemalloc which creates
keys in the constructor.
Diffstat (limited to 'lib/libc/include/tsd.h')
| -rw-r--r-- | lib/libc/include/tsd.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/libc/include/tsd.h b/lib/libc/include/tsd.h new file mode 100644 index 00000000000..a2d7e02f426 --- /dev/null +++ b/lib/libc/include/tsd.h @@ -0,0 +1,41 @@ +/* $NetBSD: tsd.h,v 1.1 2019/03/05 01:35:52 christos Exp $ */ + +/*- + * Copyright (c) 2019 The NetBSD Foundation, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _TSD_H_ +#define _TSD_H_ + +#define TSD_KEYS_MAX 64 + +struct __libc_tsd { + void *tsd_val; + void (*tsd_dtor)(void *); + int tsd_inuse; +}; + +extern struct __libc_tsd __libc_tsd[TSD_KEYS_MAX]; + +#endif /* _TSD_H_ */ |
