On Windows, ensure global object destructors are run.

This commit is contained in:
Christopher Kohlhoff 2019-03-25 13:07:38 +11:00
parent 6f55aeecd0
commit 2a1f68845a

View File

@ -35,7 +35,7 @@ struct win_global_impl
static win_global_impl instance_; static win_global_impl instance_;
static static_mutex mutex_; static static_mutex mutex_;
static T* ptr_; T* ptr_;
static tss_ptr<T> tss_ptr_; static tss_ptr<T> tss_ptr_;
}; };
@ -45,9 +45,6 @@ win_global_impl<T> win_global_impl<T>::instance_ = { 0 };
template <typename T> template <typename T>
static_mutex win_global_impl<T>::mutex_ = ASIO_STATIC_MUTEX_INIT; static_mutex win_global_impl<T>::mutex_ = ASIO_STATIC_MUTEX_INIT;
template <typename T>
T* win_global_impl<T>::ptr_ = 0;
template <typename T> template <typename T>
tss_ptr<T> win_global_impl<T>::tss_ptr_; tss_ptr<T> win_global_impl<T>::tss_ptr_;
@ -58,9 +55,9 @@ T& win_global()
{ {
win_global_impl<T>::mutex_.init(); win_global_impl<T>::mutex_.init();
static_mutex::scoped_lock lock(win_global_impl<T>::mutex_); static_mutex::scoped_lock lock(win_global_impl<T>::mutex_);
if (win_global_impl<T>::ptr_ == 0) if (win_global_impl<T>::instance_.ptr_ == 0)
win_global_impl<T>::ptr_ = new T; win_global_impl<T>::instance_.ptr_ = new T;
win_global_impl<T>::tss_ptr_ = win_global_impl<T>::ptr_; win_global_impl<T>::tss_ptr_ = win_global_impl<T>::instance_.ptr_;
} }
return *win_global_impl<T>::tss_ptr_; return *win_global_impl<T>::tss_ptr_;