diff options
Diffstat (limited to 'src/lib/libc/stdlib/abort.c')
-rw-r--r-- | src/lib/libc/stdlib/abort.c | 19 |
1 files changed, 1 insertions, 18 deletions
diff --git a/src/lib/libc/stdlib/abort.c b/src/lib/libc/stdlib/abort.c index 4c8dc70a1d..dd057710ff 100644 --- a/src/lib/libc/stdlib/abort.c +++ b/src/lib/libc/stdlib/abort.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: abort.c,v 1.16 2012/11/10 03:46:11 guenther Exp $ */ | 1 | /* $OpenBSD: abort.c,v 1.17 2014/05/14 21:54:20 tedu Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 1985 Regents of the University of California. | 3 | * Copyright (c) 1985 Regents of the University of California. |
4 | * All rights reserved. | 4 | * All rights reserved. |
@@ -39,8 +39,6 @@ int _thread_sys_sigprocmask(int, const sigset_t *, sigset_t *); | |||
39 | void | 39 | void |
40 | abort(void) | 40 | abort(void) |
41 | { | 41 | { |
42 | struct atexit *p = __atexit; | ||
43 | static int cleanup_called = 0; | ||
44 | sigset_t mask; | 42 | sigset_t mask; |
45 | 43 | ||
46 | 44 | ||
@@ -52,21 +50,6 @@ abort(void) | |||
52 | sigdelset(&mask, SIGABRT); | 50 | sigdelset(&mask, SIGABRT); |
53 | (void)_thread_sys_sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); | 51 | (void)_thread_sys_sigprocmask(SIG_SETMASK, &mask, (sigset_t *)NULL); |
54 | 52 | ||
55 | /* | ||
56 | * POSIX requires we flush stdio buffers on abort | ||
57 | */ | ||
58 | if (cleanup_called == 0) { | ||
59 | /* the cleanup routine lives in fns[0] on the last page */ | ||
60 | while (p != NULL && p->next != NULL) | ||
61 | p = p->next; | ||
62 | /* the check for fn_dso == NULL is mostly paranoia */ | ||
63 | if (p != NULL && p->fns[0].fn_dso == NULL && | ||
64 | p->fns[0].fn_ptr.std_func != NULL) { | ||
65 | cleanup_called = 1; | ||
66 | (*p->fns[0].fn_ptr.std_func)(); | ||
67 | } | ||
68 | } | ||
69 | |||
70 | (void)raise(SIGABRT); | 53 | (void)raise(SIGABRT); |
71 | 54 | ||
72 | /* | 55 | /* |