From e07443ac49d6a0d7ca2495a5dea340619abaa327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Tue, 8 Jun 2004 19:17:19 +0000 Subject: [PATCH] =?UTF-8?q?(main):=20process=20all=20slaves,=20not=20just?= =?UTF-8?q?=20up=20to=20the=20last=20slave=20sending=20data=20(bug=20repor?= =?UTF-8?q?t=20from=20Bj=C3=B6rn=20Sandell=20)=20(*?= =?UTF-8?q?):=20only=20send=20one=20ARE=5FYOU=5FTHERE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13918 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/kadm5/ipropd_master.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/kadm5/ipropd_master.c b/lib/kadm5/ipropd_master.c index 7d2924f07..e15a99ee4 100644 --- a/lib/kadm5/ipropd_master.c +++ b/lib/kadm5/ipropd_master.c @@ -94,6 +94,7 @@ struct slave { time_t seen; unsigned long flags; #define SLAVE_F_DEAD 0x1 +#define SLAVE_F_AYT 0x2 struct slave *next; }; @@ -124,6 +125,7 @@ check_acl (krb5_context context, const char *name) static void slave_seen(slave *s) { + s->flags &= ~SLAVE_F_AYT; s->seen = time(NULL); } @@ -365,9 +367,11 @@ send_are_you_there (krb5_context context, slave *s) char buf[4]; int ret; - if (s->flags & SLAVE_F_DEAD) + if (s->flags & (SLAVE_F_DEAD|SLAVE_F_AYT)) return 0; + s->flags |= SLAVE_F_AYT; + data.data = buf; data.length = 4; @@ -739,17 +743,19 @@ main(int argc, char **argv) continue; } --ret; + assert(ret >= 0); old_version = current_version; kadm5_log_get_version_fd (log_fd, ¤t_version); for (p = slaves; p != NULL; p = p->next) send_diffs (context, p, log_fd, database, current_version); } - for(p = slaves; ret && p != NULL; p = p->next) { + for(p = slaves; p != NULL; p = p->next) { if (p->flags & SLAVE_F_DEAD) continue; - if (FD_ISSET(p->fd, &readset)) { + if (ret && FD_ISSET(p->fd, &readset)) { --ret; + assert(ret >= 0); if(process_msg (context, p, log_fd, database, current_version)) slave_dead(p); } else if (slave_gone_p (p)) @@ -761,6 +767,7 @@ main(int argc, char **argv) if (ret && FD_ISSET(listen_fd, &readset)) { add_slave (context, keytab, &slaves, listen_fd); --ret; + assert(ret >= 0); } write_stats(context, slaves, current_version); }