[ekiga/gnome-2-26] Fixing crash (bug 597637) in the avahi code



commit c18347e0204dfb5d25064b3d966cd4059eeb38d8
Author: Eugen Dedu <Eugen Dedu pu-pm univ-fcomte fr>
Date:   Thu Feb 11 13:44:41 2010 +0100

    Fixing crash (bug 597637) in the avahi code
    
    When removing a disconnecting presentity, we were removing it under an iterator, which was then invalid!

 lib/engine/components/avahi/avahi-heap.cpp |   28 +++++++++++++---------------
 1 files changed, 13 insertions(+), 15 deletions(-)
---
diff --git a/lib/engine/components/avahi/avahi-heap.cpp b/lib/engine/components/avahi/avahi-heap.cpp
index 6a3a651..0447360 100644
--- a/lib/engine/components/avahi/avahi-heap.cpp
+++ b/lib/engine/components/avahi/avahi-heap.cpp
@@ -206,7 +206,19 @@ Avahi::Heap::BrowserCallback (AvahiServiceBrowser *browser,
     break;
 
   case AVAHI_BROWSER_REMOVE:
-    visit_presentities (sigc::bind (sigc::mem_fun (this, &Avahi::Heap::remover), name));
+    {
+      bool found;
+      for (iterator iter = begin ();
+	   !found && iter != end ();
+	   ++iter) {
+
+	if ((*iter)->get_name () == name) {
+
+	  found = true;
+	  (*iter)->removed ();
+	}
+      }
+    }
     break;
   case AVAHI_BROWSER_CACHE_EXHAUSTED:
     // FIXME: do I care?
@@ -338,17 +350,3 @@ Avahi::Heap::ResolverCallback (AvahiServiceResolver *resolver,
   }
 }
 
-bool
-Avahi::Heap::remover (Ekiga::PresentityPtr presentity,
-		      const std::string name)
-{
-  bool result = true;
-
-  if (presentity->get_name () == name) {
-
-    result = false;
-    presentity->removed.emit ();
-  }
-
-  return result;
-}



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