[ekiga] Fixed crash in GmRefCounted::unreference



commit 52ed7b2779d6536f8613a7d98ecbe5e9f582ff6e
Author: Julien Puydt <jpuydt gnome org>
Date:   Sun Aug 16 22:24:46 2009 +0200

    Fixed crash in GmRefCounted::unreference
    
    Fixes bug #588529.

 lib/engine/components/opal/opal-call-manager.cpp |   23 ++++++++++++++-------
 lib/engine/components/opal/opal-call-manager.h   |    2 +
 2 files changed, 17 insertions(+), 8 deletions(-)
---
diff --git a/lib/engine/components/opal/opal-call-manager.cpp b/lib/engine/components/opal/opal-call-manager.cpp
index 816445c..9960276 100644
--- a/lib/engine/components/opal/opal-call-manager.cpp
+++ b/lib/engine/components/opal/opal-call-manager.cpp
@@ -43,7 +43,6 @@
 #include "pcss-endpoint.h"
 
 #include "call-core.h"
-#include "opal-call.h"
 #include "opal-codec-description.h"
 #include "videoinput-info.h"
 
@@ -629,20 +628,28 @@ void CallManager::get_video_options (CallManager::VideoOptions & options) const
   }
 }
 
+void
+CallManager::create_call_in_main (Opal::Call* call)
+{
+  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core");
+
+  call_core->add_call (gmref_ptr<Opal::Call>(call),
+		       gmref_ptr<CallManager>(this));
+}
 
 OpalCall *CallManager::CreateCall (void *uri)
 {
-  gmref_ptr<Ekiga::CallCore> call_core = core.get ("call-core"); // FIXME: threaded?
-
-  gmref_ptr<Opal::Call> call;
+  Opal::Call* call = 0;
 
   if (uri != 0)
-    call = gmref_ptr<Opal::Call> (new Opal::Call (*this, core, (const char *) uri));
+    call = new Opal::Call (*this, core, (const char *) uri);
   else
-    call = gmref_ptr<Opal::Call> (new Opal::Call (*this, core, ""));
-  call_core->add_call (call, gmref_ptr<CallManager>(this));
+    call = new Opal::Call (*this, core, "");
+
+  Ekiga::Runtime::run_in_main (sigc::bind (sigc::mem_fun(this, &CallManager::create_call_in_main),
+					   call));
 
-  return call.get ();
+  return call;
 }
 
 
diff --git a/lib/engine/components/opal/opal-call-manager.h b/lib/engine/components/opal/opal-call-manager.h
index 9f61c1a..58aa834 100644
--- a/lib/engine/components/opal/opal-call-manager.h
+++ b/lib/engine/components/opal/opal-call-manager.h
@@ -56,6 +56,7 @@
 #include "presence-core.h"
 #include "call-manager.h"
 #include "call.h"
+#include "opal-call.h"
 
 #include <sigc++/sigc++.h>
 #include <string>
@@ -155,6 +156,7 @@ public:
     void get_video_options (VideoOptions & options) const;
 
 private:
+    void create_call_in_main (Opal::Call* call);
     OpalCall *CreateCall (void *uri);
     void DestroyCall (OpalCall *);
 



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