[ekiga] Opal Process: Explicitely remove the Bank from the ServiceCore.



commit 77cfa14674c66fd202b33ccba0996eb0f92cc64f
Author: Damien Sandras <dsandras seconix com>
Date:   Sat Jan 24 15:08:18 2015 +0100

    Opal Process: Explicitely remove the Bank from the ServiceCore.
    
    If the Process creates and adds the Bank to the ServiceCore, it should remove
    it itself when being destroyed. This ensures good memory management.

 lib/engine/components/opal/opal-main.cpp    |    7 ++++---
 lib/engine/components/opal/opal-main.h      |    4 +++-
 lib/engine/components/opal/opal-process.cpp |   12 ++++++++----
 lib/engine/components/opal/opal-process.h   |   10 ++++------
 lib/engine/engine.cpp                       |    2 +-
 5 files changed, 20 insertions(+), 15 deletions(-)
---
diff --git a/lib/engine/components/opal/opal-main.cpp b/lib/engine/components/opal/opal-main.cpp
index 98e258c..0f074c3 100644
--- a/lib/engine/components/opal/opal-main.cpp
+++ b/lib/engine/components/opal/opal-main.cpp
@@ -95,7 +95,7 @@ struct OPALSpark: public Ekiga::Spark
        && !account_store) {
 
       hook_ekiga_plugins_to_opal (core);
-      GnomeMeeting::Process ()->Start (core);
+      GnomeMeeting::Process ()->Start ();
 
       result = true;
     }
@@ -113,11 +113,12 @@ struct OPALSpark: public Ekiga::Spark
 };
 
 void
-opal_init_pprocess (int argc,
+opal_init_pprocess (Ekiga::ServiceCore& core,
+                    int argc,
                     char *argv [])
 {
   /* Ekiga PTLIB Process initialisation */
-  static GnomeMeeting instance;
+  static GnomeMeeting instance (core);
   instance.GetArguments ().SetArgs (argc, argv);
   PArgList & args = instance.GetArguments ();
   args.Parse ("d-debug:", false);
diff --git a/lib/engine/components/opal/opal-main.h b/lib/engine/components/opal/opal-main.h
index f8b9b4e..baceb76 100644
--- a/lib/engine/components/opal/opal-main.h
+++ b/lib/engine/components/opal/opal-main.h
@@ -39,8 +39,10 @@
 #define __OPAL_MAIN_H__
 
 #include "kickstart.h"
+#include "services.h"
 
-void opal_init_pprocess (int argc,
+void opal_init_pprocess (Ekiga::ServiceCore& core,
+                         int argc,
                          char *argv[]);
 
 // Must be called after opal_init_pprocess.
diff --git a/lib/engine/components/opal/opal-process.cpp b/lib/engine/components/opal/opal-process.cpp
index 7d88ae8..6a6221f 100644
--- a/lib/engine/components/opal/opal-process.cpp
+++ b/lib/engine/components/opal/opal-process.cpp
@@ -48,9 +48,9 @@
 GnomeMeeting *GnomeMeeting::GM = 0;
 
 /* The main GnomeMeeting Class  */
-GnomeMeeting::GnomeMeeting ()
-  : PProcess("", "", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER)
-
+GnomeMeeting::GnomeMeeting (Ekiga::ServiceCore& _core)
+  : PProcess("", "", MAJOR_VERSION, MINOR_VERSION, BUILD_TYPE, BUILD_NUMBER),
+    core(_core)
 {
   GM = this;
 }
@@ -59,9 +59,12 @@ GnomeMeeting::~GnomeMeeting ()
 {
   boost::shared_ptr<Ekiga::AccountCore> acore = account_core.lock ();
   boost::shared_ptr<Ekiga::PresenceCore> pcore = presence_core.lock ();
+
   acore->remove_bank (bank);
   pcore->remove_presence_publisher (bank);
   pcore->remove_cluster (bank);
+
+  core.remove (bank);
 }
 
 GnomeMeeting *
@@ -76,7 +79,7 @@ void GnomeMeeting::Main ()
 }
 
 
-void GnomeMeeting::Start (Ekiga::ServiceCore& core)
+void GnomeMeeting::Start ()
 {
   call_core = boost::weak_ptr<Ekiga::CallCore> (core.get<Ekiga::CallCore> ("call-core"));
   presence_core = boost::weak_ptr<Ekiga::PresenceCore> (core.get<Ekiga::PresenceCore> ("presence-core"));
@@ -88,6 +91,7 @@ void GnomeMeeting::Start (Ekiga::ServiceCore& core)
 
   call_manager = boost::shared_ptr<Opal::CallManager> (new Opal::CallManager (core));
   bank = boost::shared_ptr<Opal::Bank> (new Opal::Bank (core, call_manager));
+
   acore->add_bank (bank);
   pcore->add_cluster (bank);
   core.add (bank);
diff --git a/lib/engine/components/opal/opal-process.h b/lib/engine/components/opal/opal-process.h
index 30af9ad..3b9cfb8 100644
--- a/lib/engine/components/opal/opal-process.h
+++ b/lib/engine/components/opal/opal-process.h
@@ -63,17 +63,13 @@ class GnomeMeeting : public PProcess
 
  public:
 
+  GnomeMeeting (Ekiga::ServiceCore& core);
 
-  /* DESCRIPTION  :  Constructor.
-   * BEHAVIOR     :  Init variables.
-   * PRE          :  /
-   */
-  GnomeMeeting ();
   ~GnomeMeeting ();
 
   void Main();
 
-  void Start (Ekiga::ServiceCore& core);
+  void Start ();
 
   static GnomeMeeting *Process ();
 
@@ -86,6 +82,8 @@ class GnomeMeeting : public PProcess
   boost::weak_ptr<Ekiga::CallCore> call_core;
   boost::weak_ptr<Ekiga::PresenceCore> presence_core;
   boost::weak_ptr<Ekiga::AccountCore> account_core;
+
+  Ekiga::ServiceCore& core;
 };
 
 #endif
diff --git a/lib/engine/engine.cpp b/lib/engine/engine.cpp
index 8bc04c4..b76e13b 100644
--- a/lib/engine/engine.cpp
+++ b/lib/engine/engine.cpp
@@ -92,7 +92,7 @@ engine_init (Ekiga::ServiceCorePtr service_core,
              char *argv [])
 {
   // AT THE VERY FIRST, create the PProcess
-  opal_init_pprocess (argc, argv);
+  opal_init_pprocess (*service_core, argc, argv);
 
   // FIRST we add a few things by hand
   // (for speed and because that's less code)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]