ekiga r6774 - in trunk: . src/endpoints



Author: dsandras
Date: Mon Sep  1 17:49:15 2008
New Revision: 6774
URL: http://svn.gnome.org/viewvc/ekiga?rev=6774&view=rev

Log:
Make sure we execute the Opal callback for cleared calls only when
the missed and cleared signals have been handled. Otherwise, the
Ekiga::Call instance they are refering too could be corrupted.


Modified:
   trunk/ChangeLog
   trunk/src/endpoints/opal-call.cpp
   trunk/src/endpoints/opal-call.h

Modified: trunk/src/endpoints/opal-call.cpp
==============================================================================
--- trunk/src/endpoints/opal-call.cpp	(original)
+++ trunk/src/endpoints/opal-call.cpp	Mon Sep  1 17:49:15 2008
@@ -54,7 +54,6 @@
 
 using namespace Opal;
 
-
 Opal::Call::Call (OpalManager & _manager, Ekiga::ServiceCore & _core)
   : OpalCall (_manager), Ekiga::Call (), core (_core),
     runtime (*dynamic_cast<Ekiga::Runtime*>(core.get ("runtime"))),
@@ -368,8 +367,6 @@
 
   NoAnswerTimer.Stop (false);
 
-  OpalCall::OnCleared ();
-
   // TODO find a better way than that
   while (!call_setup)
     PThread::Current ()->Sleep (100);
@@ -480,14 +477,15 @@
 PBoolean
 Opal::Call::OnSetUp (OpalConnection & connection)
 {
-  bool res = OpalCall::OnSetUp (connection);
-
   parse_info (connection);
 
   runtime.run_in_main (setup.make_slot ());
   call_setup = true;
 
-  return res;
+  cleared.connect (sigc::mem_fun (this, &Opal::Call::on_cleared_call));
+  missed.connect (sigc::mem_fun (this, &Opal::Call::on_missed_call));
+
+  return OpalCall::OnSetUp (connection);
 }
 
 
@@ -645,3 +643,17 @@
       Clear (OpalConnection::EndedByNoAnswer);
   }
 }
+
+
+void
+Opal::Call::on_cleared_call (std::string /*reason*/)
+{
+  OpalCall::OnCleared ();
+}
+
+
+void
+Opal::Call::on_missed_call ()
+{
+  OpalCall::OnCleared ();
+}

Modified: trunk/src/endpoints/opal-call.h
==============================================================================
--- trunk/src/endpoints/opal-call.h	(original)
+++ trunk/src/endpoints/opal-call.h	Mon Sep  1 17:49:15 2008
@@ -53,7 +53,8 @@
 
   class Call
     : public OpalCall,
-    public Ekiga::Call
+      public Ekiga::Call,
+      public sigc::trackable
   {
 
 public:
@@ -248,6 +249,10 @@
     unsigned too_late_v;
     unsigned out_of_order_v;
     unsigned total_v;
+
+private:
+    void on_cleared_call (std::string);
+    void on_missed_call ();
   };
 };
 



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