[beast/devel: 14/26] BSE: store Bse::ServerImpl singleton as shared_ptr
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/devel: 14/26] BSE: store Bse::ServerImpl singleton as shared_ptr
- Date: Mon, 13 Oct 2014 02:27:17 +0000 (UTC)
commit dea4665ba55d1d466d64b41c741e3d49cdb75739
Author: Tim Janik <timj gnu org>
Date: Sun Oct 12 05:22:29 2014 +0200
BSE: store Bse::ServerImpl singleton as shared_ptr
bse/bsemain.cc | 2 +-
bse/bseserver.cc | 13 ++-----------
bse/bseserver.hh | 1 +
3 files changed, 4 insertions(+), 12 deletions(-)
---
diff --git a/bse/bsemain.cc b/bse/bsemain.cc
index 5bd2992..07192b3 100644
--- a/bse/bsemain.cc
+++ b/bse/bsemain.cc
@@ -584,7 +584,7 @@ init_aida_idl ()
g_source_set_priority (source, BSE_PRIORITY_GLUE);
g_source_attach (source, bse_main_context);
// provide initial remote object reference
- Bse::ServerIface::__aida_connection__()->remote_origin (&Bse::ServerImpl::instance());
+ Bse::ServerIface::__aida_connection__()->remote_origin (Bse::ServerImpl::instance().shared_from_this());
}
} // Bse
diff --git a/bse/bseserver.cc b/bse/bseserver.cc
index cee5ebc..232f5f5 100644
--- a/bse/bseserver.cc
+++ b/bse/bseserver.cc
@@ -1140,17 +1140,8 @@ ServerImpl::get_test_object ()
ServerImpl&
ServerImpl::instance()
{
- static Rapicorn::Atomic<ServerImpl*> instance_ = NULL;
- if (LIKELY (instance_ != NULL))
- return *instance_;
- static Mutex instance_mutex;
- ScopedLock<Mutex> locker (instance_mutex);
- if (!instance_)
- {
- static uint64 instance_space[sizeof (*instance_) / sizeof (uint64)];
- instance_ = new (instance_space) ServerImpl();
- }
- return *instance_;
+ static std::shared_ptr<ServerImpl> singleton = Rapicorn::FriendAllocator<ServerImpl>::make_shared();
+ return *singleton;
}
void
diff --git a/bse/bseserver.hh b/bse/bseserver.hh
index 6ce5a41..6ba77a2 100644
--- a/bse/bseserver.hh
+++ b/bse/bseserver.hh
@@ -100,6 +100,7 @@ namespace Bse {
class ServerImpl : public ServerIface {
TestObjectImplP test_object_;
+ friend class FriendAllocator<ServerImpl>; // provide make_shared for non-public ctor
protected:
explicit ServerImpl ();
virtual ~ServerImpl ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]