Commit 9662ca2e authored by neverlord's avatar neverlord

fixed shutdown order and removed some legacy code

parent 1f1418cf
...@@ -65,30 +65,19 @@ std::atomic<scheduler*> s_scheduler; ...@@ -65,30 +65,19 @@ std::atomic<scheduler*> s_scheduler;
template<typename T> template<typename T>
void stop_and_kill(std::atomic<T*>& ptr) { void stop_and_kill(std::atomic<T*>& ptr) {
auto p = ptr.load(); for (;;) {
if (p) { auto p = ptr.load();
if (ptr.compare_exchange_weak(p, nullptr)) { if (ptr.compare_exchange_weak(p, nullptr)) {
p->stop(); p->stop();
delete p; delete p;
ptr = nullptr; ptr = nullptr;
return;
} }
else {
stop_and_kill(ptr);
}
}
}
/*
struct static_cleanup_helper {
~static_cleanup_helper() {
delete_singletons();
} }
} }
s_static_cleanup_helper;
*/
template<typename T> template<typename T>
T* lazy_get(std::atomic<T*>& ptr, bool register_atexit_fun = false) { T* lazy_get(std::atomic<T*>& ptr) {
T* result = ptr.load(std::memory_order_seq_cst); T* result = ptr.load(std::memory_order_seq_cst);
if (result == nullptr) { if (result == nullptr) {
auto tmp = new T; auto tmp = new T;
...@@ -97,20 +86,8 @@ T* lazy_get(std::atomic<T*>& ptr, bool register_atexit_fun = false) { ...@@ -97,20 +86,8 @@ T* lazy_get(std::atomic<T*>& ptr, bool register_atexit_fun = false) {
} }
else { else {
delete tmp; delete tmp;
return lazy_get(ptr, register_atexit_fun); return lazy_get(ptr);
} }
/*
else {
// ok, successfully created singleton, register exit fun?
if (register_atexit_fun) {
//# ifndef __APPLE__
// atexit(delete_singletons);
//# endif
}
return tmp;
}
*/
static_cast<void>(register_atexit_fun); // keep compiler happy
} }
return result; return result;
} }
...@@ -128,8 +105,8 @@ void shutdown() { ...@@ -128,8 +105,8 @@ void shutdown() {
if (rptr) { if (rptr) {
rptr->await_running_count_equal(0); rptr->await_running_count_equal(0);
} }
stop_and_kill(s_scheduler);
stop_and_kill(s_network_manager); stop_and_kill(s_network_manager);
stop_and_kill(s_scheduler);
std::atomic_thread_fence(std::memory_order_seq_cst); std::atomic_thread_fence(std::memory_order_seq_cst);
// it's safe now to delete all other singletons now // it's safe now to delete all other singletons now
delete s_actor_registry.load(); delete s_actor_registry.load();
...@@ -152,7 +129,7 @@ actor_registry* singleton_manager::get_actor_registry() { ...@@ -152,7 +129,7 @@ actor_registry* singleton_manager::get_actor_registry() {
} }
uniform_type_info_map* singleton_manager::get_uniform_type_info_map() { uniform_type_info_map* singleton_manager::get_uniform_type_info_map() {
return lazy_get(s_uniform_type_info_map, true); return lazy_get(s_uniform_type_info_map);
} }
group_manager* singleton_manager::get_group_manager() { group_manager* singleton_manager::get_group_manager() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment