The .known is the array management item which has no business in a list-managed struct. Phase 1: return it where it was. In phase 2 we will drop it from cldc_host. Then perhaps change array to a circular list.
Signed-off-by: Pete Zaitcev <[email protected]> diff --git a/server/cldu.c b/server/cldu.c index 1e11e6c..34dd996 100644 --- a/server/cldu.c +++ b/server/cldu.c @@ -22,13 +22,18 @@ #define N_CLD 10 /* 5 * (v4+v6) */ +struct cld_host { + int known; + struct cldc_host h; +}; + struct cld_session { bool forced_hosts; /* Administrator overrode default CLD */ bool sess_open; struct cldc_udp *lib; /* library state */ int actx; /* Active host cldv[actx] */ - struct cldc_host cldv[N_CLD]; + struct cld_host cldv[N_CLD]; struct event ev; /* Associated with fd */ char *cfname; /* /chunk-CELL directory */ @@ -71,7 +76,7 @@ static int cldu_nextactive(struct cld_session *sp) n = 0; } /* Full circle, end on the old actx */ - return n; + return sp->actx; } static int cldu_setcell(struct cld_session *sp, @@ -217,11 +222,11 @@ static int cldu_set_cldc(struct cld_session *sp, int newactive) } sp->actx = newactive; - hp = &sp->cldv[sp->actx]; - if (!hp->known) { + if (!sp->cldv[sp->actx].known) { applog(LOG_ERR, "No CLD hosts"); goto err_addr; } + hp = &sp->cldv[sp->actx].h; rc = cldc_udp_new(hp->host, hp->port, &sp->lib); if (rc) { @@ -530,8 +535,9 @@ int cld_begin(const char *thishost, const char *thiscell, uint32_t nid, i = 0; for (tmp = host_list; tmp; tmp = tmp->next) { if (i < N_CLD) { - memcpy(&ses.cldv[i], tmp->data, + memcpy(&ses.cldv[i].h, tmp->data, sizeof(struct cldc_host)); + ses.cldv[i].known = 1; i++; } else { struct cldc_host *hp = tmp->data; @@ -577,7 +583,7 @@ void cld_end(void) if (!ses.forced_hosts) { for (i = 0; i < N_CLD; i++) { if (ses.cldv[i].known) - free(ses.cldv[i].host); + free(ses.cldv[i].h.host); } } @@ -589,7 +595,7 @@ void cldu_add_host(const char *hostname, unsigned int port, void log(const char *fmt, ...)) { static struct cld_session *sp = &ses; - struct cldc_host *hp; + struct cld_host *hp; int i; for (i = 0; i < N_CLD; i++) { @@ -600,7 +606,7 @@ void cldu_add_host(const char *hostname, unsigned int port, if (i >= N_CLD) return; - if (cldc_saveaddr(hp, 100, 100, port, strlen(hostname), hostname, + if (cldc_saveaddr(&hp->h, 100, 100, port, strlen(hostname), hostname, debugging, log)) return; hp->known = 1; -- To unsubscribe from this list: send the line "unsubscribe hail-devel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
