]> git.meshlink.io Git - catta/commitdiff
fix avahi_interface_monitor_sync() for the linux NETLINK implementation
authorLennart Poettering <lennart@poettering.net>
Mon, 24 Oct 2005 23:34:42 +0000 (23:34 +0000)
committerLennart Poettering <lennart@poettering.net>
Mon, 24 Oct 2005 23:34:42 +0000 (23:34 +0000)
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@860 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe

avahi-core/iface-linux.c
avahi-core/netlink.c

index bc871524cb4d93971202610b21a70e51f6d995d3..4fc4addfd49cf6e37f4e48314a7f891ae6765ee3 100644 (file)
@@ -352,10 +352,9 @@ void avahi_interface_monitor_sync(AvahiInterfaceMonitor *m) {
     /* Let's handle netlink events until we are done with wild
      * dumping */
     
-    while (m->osdep.list != LIST_DONE) {
+    while (!m->list_complete)
         if (!avahi_netlink_work(m->osdep.netlink, 1) == 0)
             break;
-    }
 
     /* At this point Avahi knows about all local interfaces and
      * addresses in existance. */
index 11961b764f866b795a4d4e3fc2fee8865090c99f..554f25ae17b42e5a65df3917754993679e111315 100644 (file)
@@ -46,41 +46,34 @@ struct AvahiNetlink {
 };
 
 int avahi_netlink_work(AvahiNetlink *nl, int block) {
+    ssize_t bytes;
+    struct nlmsghdr *p;
+    
     assert(nl);
+    
+    if ((bytes = recv(nl->fd, nl->buffer, nl->buffer_length, block ? 0 : MSG_DONTWAIT)) < 0) {
+        
+        if (errno == EAGAIN || errno == EINTR)
+            return 0;
+        
+        avahi_log_error(__FILE__": recv() failed: %s", strerror(errno));
+        return -1;
+    }
 
-    for (;;) {
-        ssize_t bytes;
-        struct nlmsghdr *p;
-
-        for (;;) {
-            if ((bytes = recv(nl->fd, nl->buffer, nl->buffer_length, block ? 0 : MSG_DONTWAIT)) < 0) {
-
-                if (errno == EAGAIN || errno == EINTR)
-                    return 0;
-                
-                avahi_log_error(__FILE__": recv() failed: %s", strerror(errno));
-                return -1;
-            }
-
-            break;
+    p = (struct nlmsghdr *) nl->buffer;
+    
+    assert(nl->callback);
+    
+    for (; bytes > 0; p = NLMSG_NEXT(p, bytes)) {
+        if (!NLMSG_OK(p, (size_t) bytes)) {
+            avahi_log_warn(__FILE__": packet truncated");
+            return -1;
         }
-
-        p = (struct nlmsghdr *) nl->buffer;
         
-        if (nl->callback) {
-            for (; bytes > 0; p = NLMSG_NEXT(p, bytes)) {
-                if (!NLMSG_OK(p, (size_t) bytes)) {
-                    avahi_log_warn(__FILE__": packet truncated");
-                    return -1;
-                }
-
-                nl->callback(nl, p, nl->userdata);
-            }
-        }
-
-        if (block)
-            return 1;
+        nl->callback(nl, p, nl->userdata);
     }
+    
+    return 0;
 }
 
 static void socket_event(AvahiWatch *w, int fd, AvahiWatchEvent event, void *userdata) {