summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdlib/exit.c
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2007-09-03 14:40:16 +0000
committermillert <millert@openbsd.org>2007-09-03 14:40:16 +0000
commit5198527c0e2957645fda7040dfcb34da8197dcbd (patch)
tree0b140144618ef8fbe4bb1dcc3bf8af81c3ffd235 /lib/libc/stdlib/exit.c
parentAdd ENOMSG and EIDRM; from jsg@ (diff)
downloadwireguard-openbsd-5198527c0e2957645fda7040dfcb34da8197dcbd.tar.xz
wireguard-openbsd-5198527c0e2957645fda7040dfcb34da8197dcbd.zip
Add __cxa_atexit() support for gcc3. This provides support for shared object destructors called at dlclose() time. Inspired by similar changes in FreeBSD and NetBSD.
Diffstat (limited to 'lib/libc/stdlib/exit.c')
-rw-r--r--lib/libc/stdlib/exit.c22
1 files changed, 6 insertions, 16 deletions
diff --git a/lib/libc/stdlib/exit.c b/lib/libc/stdlib/exit.c
index 90b7d5adc2d..83fe3d2de56 100644
--- a/lib/libc/stdlib/exit.c
+++ b/lib/libc/stdlib/exit.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: exit.c,v 1.11 2005/08/08 08:05:36 espie Exp $ */
+/* $OpenBSD: exit.c,v 1.12 2007/09/03 14:40:16 millert Exp $ */
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
@@ -50,20 +50,10 @@ int __isthreaded = 0;
void
exit(int status)
{
- struct atexit *p, *q;
- int n, pgsize = getpagesize();
-
- if (!__atexit_invalid) {
- p = __atexit;
- while (p != NULL) {
- for (n = p->ind; --n >= 0;)
- if (p->fns[n] != NULL)
- (*p->fns[n])();
- q = p;
- p = p->next;
- munmap(q, pgsize);
- }
- }
- /* cleanup, if registered, was called through fns[0] in the last page */
+ /*
+ * Call functions registered by atexit() or _cxa_atexit()
+ * (including the stdio cleanup routine) and then _exit().
+ */
+ __cxa_finalize(NULL);
_exit(status);
}