vlc | branch: master | Hugo Beauzée-Luyssen <[email protected]> | Thu Dec 10 13:08:44 2015 +0100| [a375caeb32d97670aeb5b462d8d95ba28692b732] | committer: Hugo Beauzée-Luyssen
qt4: Make Singleton thread safe This is unoptimal but could be improved using C++11 (or memory barriers for double check locking) fixes #14885 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a375caeb32d97670aeb5b462d8d95ba28692b732 --- modules/gui/qt4/util/singleton.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/gui/qt4/util/singleton.hpp b/modules/gui/qt4/util/singleton.hpp index f6f6050..c27e635 100644 --- a/modules/gui/qt4/util/singleton.hpp +++ b/modules/gui/qt4/util/singleton.hpp @@ -24,6 +24,8 @@ #define _SINGLETON_HPP_ #include <stdlib.h> +#include <vlc_threads.h> + #include "qt4.hpp" template <typename T> @@ -32,18 +34,22 @@ class Singleton public: static T* getInstance( intf_thread_t *p_intf = NULL ) { + vlc_mutex_lock( &m_mutex ); if ( m_instance == NULL ) m_instance = new T( p_intf ); + vlc_mutex_unlock( &m_mutex ); return m_instance; } static void killInstance() { + vlc_mutex_lock( &m_mutex ); if ( m_instance != NULL ) { delete m_instance; m_instance = NULL; } + vlc_mutex_unlock( &m_mutex ); } protected: Singleton(){} @@ -55,9 +61,13 @@ protected: private: static T* m_instance; + static vlc_mutex_t m_mutex; }; template <typename T> T* Singleton<T>::m_instance = NULL; +template <typename T> +vlc_mutex_t Singleton<T>::m_mutex = VLC_STATIC_MUTEX; + #endif // _SINGLETON_HPP_ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
