From 3116f62a9d21df30485351428c3be7dc2d5e2018 Mon Sep 17 00:00:00 2001 From: Karl Heyes Date: Tue, 30 Aug 2005 00:30:30 +0000 Subject: [PATCH] extra checks on YP updating, typically on changes over HUP svn path=/icecast/trunk/icecast/; revision=9862 --- src/yp.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/yp.c b/src/yp.c index d0eb96fc..e42eb124 100644 --- a/src/yp.c +++ b/src/yp.c @@ -601,7 +601,7 @@ static void check_servers () ypdata_t *yp; source_t *source = node->key; - if ((yp = create_yp_entry (source->mount)) != NULL) + if (source->yp_public && (yp = create_yp_entry (source->mount)) != NULL) { DEBUG1 ("Adding existing mount %s", source->mount); yp->server = server; @@ -830,17 +830,26 @@ void yp_add (const char *mount) while (server) { ypdata_t *yp; - /* add new ypdata to each servers pending yp */ - if ((yp = create_yp_entry (mount)) != NULL) + + /* on-demand relays may already have a YP entry */ + yp = find_yp_mount (server->mounts, mount); + if (yp == NULL) { - DEBUG2 ("Adding %s to %s", mount, server->url); - yp->server = server; - yp->touch_interval = server->touch_interval; - yp->next = server->pending_mounts; - yp->next_update = time(NULL) + 5; - server->pending_mounts = yp; - yp_update = 1; + /* add new ypdata to each servers pending yp */ + yp = create_yp_entry (mount); + if (yp) + { + DEBUG2 ("Adding %s to %s", mount, server->url); + yp->server = server; + yp->touch_interval = server->touch_interval; + yp->next = server->pending_mounts; + yp->next_update = time(NULL) + 5; + server->pending_mounts = yp; + yp_update = 1; + } } + else + DEBUG1 ("YP entry %s already exists", mount); server = server->next; } thread_mutex_unlock (&yp_pending_lock);