aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/libsupc++/new_handler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/libsupc++/new_handler.cc')
-rw-r--r--libstdc++-v3/libsupc++/new_handler.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/libstdc++-v3/libsupc++/new_handler.cc b/libstdc++-v3/libsupc++/new_handler.cc
index 2f9f6bd3579..42b19e69367 100644
--- a/libstdc++-v3/libsupc++/new_handler.cc
+++ b/libstdc++-v3/libsupc++/new_handler.cc
@@ -31,6 +31,12 @@
#include "new"
+/* APPLE LOCAL begin keymgr */
+#if defined APPLE_KEYMGR && ! defined(LIBCC_KEXT) && ! defined(APPLE_KERNEL_EXTENSION)
+#include "bits/os_defines.h"
+#endif
+/* APPLE LOCAL end keymgr */
+
const std::nothrow_t std::nothrow = { };
using std::new_handler;
@@ -39,9 +45,23 @@ new_handler __new_handler;
new_handler
std::set_new_handler (new_handler handler) throw()
{
+/* APPLE LOCAL begin keymgr */
+#if defined(APPLE_KEYMGR) && ! defined(APPLE_KERNEL_EXTENSION) && ! defined(LIBCC_KEXT)
+ new_handler prev_handler =
+ (new_handler) _keymgr_get_per_thread_data (KEYMGR_NEW_HANLDER_KEY);
+ if ( ! prev_handler)
+ prev_handler = __new_handler;
+ _keymgr_set_per_thread_data (KEYMGR_NEW_HANLDER_KEY, (void *) handler);
+#else /* ! APPLE_KEYMGR */
new_handler prev_handler = __new_handler;
+#endif /* APPLE_KEYMGR */
+/* APPLE LOCAL end keymgr */
__new_handler = handler;
return prev_handler;
}
+/* APPLE LOCAL begin libcc_kext */
+#if !defined(LIBCC_KEXT)
std::bad_alloc::~bad_alloc() throw() { }
+#endif
+/* APPLE LOCAL end libcc_kext */