[beast/devel: 14/26] BSE: store Bse::ServerImpl singleton as shared_ptr



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]