summaryrefslogtreecommitdiff
path: root/glib/glibmm
diff options
context:
space:
mode:
Diffstat (limited to 'glib/glibmm')
-rw-r--r--glib/glibmm/dispatcher.cc13
-rw-r--r--glib/glibmm/exceptionhandler.cc9
2 files changed, 10 insertions, 12 deletions
diff --git a/glib/glibmm/dispatcher.cc b/glib/glibmm/dispatcher.cc
index 198d5253..31372702 100644
--- a/glib/glibmm/dispatcher.cc
+++ b/glib/glibmm/dispatcher.cc
@@ -18,7 +18,6 @@
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#include <glibmm/threads.h>
#include <glibmm/dispatcher.h>
#include <glibmm/exceptionhandler.h>
#include <glibmm/fileutils.h>
@@ -144,7 +143,7 @@ protected:
explicit DispatchNotifier(const Glib::RefPtr<MainContext>& context);
private:
- static Glib::Threads::Private<DispatchNotifier> thread_specific_instance_;
+ static thread_local DispatchNotifier* thread_specific_instance_;
std::set<const Dispatcher*> deleted_dispatchers_;
@@ -167,7 +166,7 @@ private:
/**** Glib::DispatchNotifier ***********************************************/
// static
-Glib::Threads::Private<DispatchNotifier> DispatchNotifier::thread_specific_instance_;
+thread_local DispatchNotifier* DispatchNotifier::thread_specific_instance_ = nullptr;
DispatchNotifier::DispatchNotifier(const Glib::RefPtr<MainContext>& context)
:
@@ -270,12 +269,12 @@ void DispatchNotifier::create_pipe()
DispatchNotifier* DispatchNotifier::reference_instance
(const Glib::RefPtr<MainContext>& context, const Dispatcher* dispatcher)
{
- DispatchNotifier* instance = thread_specific_instance_.get();
+ DispatchNotifier* instance = thread_specific_instance_;
if(!instance)
{
instance = new DispatchNotifier(context);
- thread_specific_instance_.replace(instance);
+ thread_specific_instance_ = instance;
}
else
{
@@ -303,7 +302,7 @@ DispatchNotifier* DispatchNotifier::reference_instance
void DispatchNotifier::unreference_instance(
DispatchNotifier* notifier, const Dispatcher* dispatcher)
{
- DispatchNotifier* const instance = thread_specific_instance_.get();
+ DispatchNotifier* const instance = thread_specific_instance_;
// Yes, the notifier argument is only used to check for sanity.
g_return_if_fail(instance == notifier);
@@ -321,7 +320,7 @@ void DispatchNotifier::unreference_instance(
g_return_if_fail(instance->ref_count_ == 0); // could be < 0 if messed up
// This causes deletion of the notifier object.
- thread_specific_instance_.replace(nullptr);
+ thread_specific_instance_ = nullptr;
}
}
diff --git a/glib/glibmm/exceptionhandler.cc b/glib/glibmm/exceptionhandler.cc
index df0b53e1..faad2a06 100644
--- a/glib/glibmm/exceptionhandler.cc
+++ b/glib/glibmm/exceptionhandler.cc
@@ -20,7 +20,6 @@
*/
#include <glibmmconfig.h>
-#include <glibmm/threads.h>
#include <glibmm/error.h>
#include <glibmm/exceptionhandler.h>
#include <glib.h>
@@ -35,7 +34,7 @@ typedef sigc::signal<void> HandlerList;
// Each thread has its own list of exception handlers
// to avoid thread synchronization problems.
-static Glib::Threads::Private<HandlerList> thread_specific_handler_list;
+static thread_local HandlerList* thread_specific_handler_list = nullptr;
static void glibmm_exception_warning(const GError* error)
@@ -86,12 +85,12 @@ namespace Glib
sigc::connection add_exception_handler(const sigc::slot<void>& slot)
{
- HandlerList* handler_list = thread_specific_handler_list.get();
+ HandlerList* handler_list = thread_specific_handler_list;
if(!handler_list)
{
handler_list = new HandlerList();
- thread_specific_handler_list.set(handler_list);
+ thread_specific_handler_list = handler_list;
}
handler_list->slots().push_front(slot);
@@ -114,7 +113,7 @@ void exception_handlers_invoke() noexcept
// handled. If there are no more handlers in the list and the exception
// is still unhandled, call glibmm_unexpected_exception().
- if(HandlerList *const handler_list = thread_specific_handler_list.get())
+ if(HandlerList *const handler_list = thread_specific_handler_list)
{
HandlerList::iterator pslot = handler_list->slots().begin();