diff options
Diffstat (limited to 'libstdc++-v3/libsupc++/new_handler.cc')
-rw-r--r-- | libstdc++-v3/libsupc++/new_handler.cc | 20 |
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 */ |