diff options
author | guenther <> | 2017-10-28 21:23:14 +0000 |
---|---|---|
committer | guenther <> | 2017-10-28 21:23:14 +0000 |
commit | 2ef9f592feb50878d40c2acef2df0a3231fb9899 (patch) | |
tree | f833ad4169aecf6018186d7856a66df4af31a13f /src/lib/libc/include | |
parent | 4b67b71dca9c7dea6f10d024c79279ea73b79cc2 (diff) | |
download | openbsd-2ef9f592feb50878d40c2acef2df0a3231fb9899.tar.gz openbsd-2ef9f592feb50878d40c2acef2df0a3231fb9899.tar.bz2 openbsd-2ef9f592feb50878d40c2acef2df0a3231fb9899.zip |
Change pthread_cleanup_{push,pop} to macros that store the cleanup info
on the stack instead of mallocing the list and move the APIs from libpthread
to libc so that they can be used inside libc.
Note: the standard was explicitly written to permit/support this
"macro with unmatched brace" style and it's what basically everyone
else already does. We xor the info with random cookies with a
random magic to detect/trip-up overwrites.
Major bump to both libc and libpthread due to the API move.
ok mpi@
Diffstat (limited to 'src/lib/libc/include')
-rw-r--r-- | src/lib/libc/include/thread_private.h | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/lib/libc/include/thread_private.h b/src/lib/libc/include/thread_private.h index 23faa73faa..6c695ee5ee 100644 --- a/src/lib/libc/include/thread_private.h +++ b/src/lib/libc/include/thread_private.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: thread_private.h,v 1.30 2017/09/05 02:40:54 guenther Exp $ */ | 1 | /* $OpenBSD: thread_private.h,v 1.31 2017/10/28 21:23:14 guenther Exp $ */ |
2 | 2 | ||
3 | /* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */ | 3 | /* PUBLIC DOMAIN: No Rights Reserved. Marco S Hyman <marc@snafu.org> */ |
4 | 4 | ||
@@ -344,12 +344,6 @@ struct rthread_storage { | |||
344 | void *data; | 344 | void *data; |
345 | }; | 345 | }; |
346 | 346 | ||
347 | struct rthread_cleanup_fn { | ||
348 | void (*fn)(void *); | ||
349 | void *arg; | ||
350 | struct rthread_cleanup_fn *next; | ||
351 | }; | ||
352 | |||
353 | struct tib; | 347 | struct tib; |
354 | struct stack; | 348 | struct stack; |
355 | struct pthread { | 349 | struct pthread { |
@@ -367,7 +361,7 @@ struct pthread { | |||
367 | pthread_cond_t blocking_cond; | 361 | pthread_cond_t blocking_cond; |
368 | struct pthread_attr attr; | 362 | struct pthread_attr attr; |
369 | struct rthread_storage *local_storage; | 363 | struct rthread_storage *local_storage; |
370 | struct rthread_cleanup_fn *cleanup_fns; | 364 | struct __thread_cleanup *cleanup_fns; |
371 | 365 | ||
372 | /* cancel received in a delayed cancel block? */ | 366 | /* cancel received in a delayed cancel block? */ |
373 | int delayed_cancel; | 367 | int delayed_cancel; |