summaryrefslogtreecommitdiff
path: root/src/lib/libc/include
diff options
context:
space:
mode:
authorguenther <>2017-10-28 21:23:14 +0000
committerguenther <>2017-10-28 21:23:14 +0000
commit2ef9f592feb50878d40c2acef2df0a3231fb9899 (patch)
treef833ad4169aecf6018186d7856a66df4af31a13f /src/lib/libc/include
parent4b67b71dca9c7dea6f10d024c79279ea73b79cc2 (diff)
downloadopenbsd-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.h10
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
347struct rthread_cleanup_fn {
348 void (*fn)(void *);
349 void *arg;
350 struct rthread_cleanup_fn *next;
351};
352
353struct tib; 347struct tib;
354struct stack; 348struct stack;
355struct pthread { 349struct 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;