exception (get_terminate(), [...]): Declare.
[gcc.git] / libstdc++-v3 / libsupc++ / new_handler.cc
index bbce0bdfa3066c31d7c1b0f6988d8e63300ae439..2f6bb5e46c196391cba28a248760fb82a69c42b6 100644 (file)
 const std::nothrow_t std::nothrow = { };
 
 using std::new_handler;
-new_handler __new_handler;
+namespace
+{
+  new_handler __new_handler;
+}
 
 new_handler
 std::set_new_handler (new_handler handler) throw()
 {
-  new_handler prev_handler = __new_handler;
-  __new_handler = handler;
+  new_handler prev_handler;
+  __atomic_exchange (&__new_handler, &handler, &prev_handler,
+                    __ATOMIC_ACQ_REL);
   return prev_handler;
 }
+
+new_handler
+std::get_new_handler () noexcept
+{
+  new_handler handler;
+  __atomic_load (&__new_handler, &handler, __ATOMIC_ACQUIRE);
+  return handler;
+}