[ekiga] Fixing crash (bug #597637) in the avahi code



commit 2513b6110b3d842eb2d3863f34bedcbacfe99422
Author: Julien Puydt <jpuydt gnome org>
Date:   Wed Oct 7 07:03:23 2009 +0200

    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 |   29 ++++++++++++---------------
 1 files changed, 13 insertions(+), 16 deletions(-)
---
diff --git a/lib/engine/components/avahi/avahi-heap.cpp b/lib/engine/components/avahi/avahi-heap.cpp
index 680de69..53c9b4a 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 (boost::bind (&Avahi::Heap::remover, this, _1, 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,18 +350,3 @@ Avahi::Heap::ResolverCallback (AvahiServiceResolver *resolver,
     break;
   }
 }
-
-bool
-Avahi::Heap::remover (Ekiga::PresentityPtr presentity,
-		      const std::string name)
-{
-  bool result = true;
-
-  if (presentity->get_name () == name) {
-
-    result = false;
-    presentity->removed ();
-  }
-
-  return result;
-}



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