From cf3a6c2ce56e2c63832716619f75fe7013179fe7 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Fri, 13 Jul 2018 08:08:15 +0200 Subject: [PATCH] Fixed a deadlock. --- src/gsi/gsi/gsiObject.cc | 9 +++++++-- src/gsi/gsi/gsiObject.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gsi/gsi/gsiObject.cc b/src/gsi/gsi/gsiObject.cc index f8f31ed9b..360acd9e4 100644 --- a/src/gsi/gsi/gsiObject.cc +++ b/src/gsi/gsi/gsiObject.cc @@ -121,7 +121,7 @@ Proxy::release () // and then make us the owner const gsi::ClassBase *cls = m_cls_decl; if (cls && cls->is_managed ()) { - void *o = obj (); + void *o = obj_internal (); if (o) { cls->gsi_object (o)->keep (); } @@ -138,7 +138,7 @@ Proxy::keep () const gsi::ClassBase *cls = m_cls_decl; if (cls) { - void *o = obj (); + void *o = obj_internal (); if (o) { if (cls->is_managed ()) { cls->gsi_object (o)->keep (); @@ -172,7 +172,12 @@ void * Proxy::obj () { QMutexLocker locker (&m_lock); + return obj_internal (); +} +void * +Proxy::obj_internal () +{ if (! m_obj) { if (m_destroyed) { throw tl::Exception (tl::to_string (QObject::tr ("Object has been destroyed already"))); diff --git a/src/gsi/gsi/gsiObject.h b/src/gsi/gsi/gsiObject.h index fab69ba99..223c9f8d2 100644 --- a/src/gsi/gsi/gsiObject.h +++ b/src/gsi/gsi/gsiObject.h @@ -245,6 +245,7 @@ private: void *set_internal (void *obj, bool owned, bool const_ref, bool can_destroy); void object_status_changed (gsi::ObjectBase::StatusEventType type); void detach_internal (); + void *obj_internal (); }; }