diff mbox

[LEDE-DEV,mdns] Avoid duplicated iteration over services when announcing

Message ID 20170210134439.26343-1-zajec5@gmail.com
State Accepted
Headers show

Commit Message

Rafał Miłecki Feb. 10, 2017, 1:44 p.m. UTC
From: Rafał Miłecki <rafal@milecki.pl>

In function service_announce_services we iterate over services and
handle every single one so calling service_reply which also iterates
doesn't make sense.

In simple cases it was just wasting CPU cycles. We got service, we were
passing its name and we were looking for it again comparing names.
In cases with one service available on few different ports it was worse.
For every iterated service we were announcing that one and all other
sharing the same name. It resulted in sending n^2 records.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
 service.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

John Crispin Feb. 10, 2017, 2:11 p.m. UTC | #1
On 10/02/2017 14:44, Rafał Miłecki wrote:
> From: Rafał Miłecki <rafal@milecki.pl>
> 
> In function service_announce_services we iterate over services and
> handle every single one so calling service_reply which also iterates
> doesn't make sense.
> 
> In simple cases it was just wasting CPU cycles. We got service, we were
> passing its name and we were looking for it again comparing names.
> In cases with one service available on few different ports it was worse.
> For every iterated service we were announcing that one and all other
> sharing the same name. It resulted in sending n^2 records.
> 
> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>

Acked-by: John Crispin <john@phrozen.org>

> ---
>  service.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/service.c b/service.c
> index 182b2b2..bb87aff 100644
> --- a/service.c
> +++ b/service.c
> @@ -179,7 +179,7 @@ service_announce_services(struct interface *iface, const char *service, int ttl)
>  			else
>  				dns_send_answer(iface, sdudp);
>  		}
> -		service_reply(iface, s->service, ttl);
> +		service_reply_single(iface, s, ttl, 0);
>  	}
>  }
>  
>
diff mbox

Patch

diff --git a/service.c b/service.c
index 182b2b2..bb87aff 100644
--- a/service.c
+++ b/service.c
@@ -179,7 +179,7 @@  service_announce_services(struct interface *iface, const char *service, int ttl)
 			else
 				dns_send_answer(iface, sdudp);
 		}
-		service_reply(iface, s->service, ttl);
+		service_reply_single(iface, s, ttl, 0);
 	}
 }