projects
/
gcc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
exception (get_terminate(), [...]): Declare.
[gcc.git]
/
libstdc++-v3
/
libsupc++
/
new_handler.cc
diff --git
a/libstdc++-v3/libsupc++/new_handler.cc
b/libstdc++-v3/libsupc++/new_handler.cc
index bbce0bdfa3066c31d7c1b0f6988d8e63300ae439..2f6bb5e46c196391cba28a248760fb82a69c42b6 100644
(file)
--- a/
libstdc++-v3/libsupc++/new_handler.cc
+++ b/
libstdc++-v3/libsupc++/new_handler.cc
@@
-28,12
+28,24
@@
const std::nothrow_t std::nothrow = { };
using std::new_handler;
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
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;
}
return prev_handler;
}
+
+new_handler
+std::get_new_handler () noexcept
+{
+ new_handler handler;
+ __atomic_load (&__new_handler, &handler, __ATOMIC_ACQUIRE);
+ return handler;
+}