(main): process all slaves, not just up to the last slave sending data

(bug report from Björn Sandell <biorn@dce.chalmers.se>)
(*): only send one ARE_YOU_THERE


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@13918 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2004-06-08 19:17:19 +00:00
parent edb7f2e0f2
commit e07443ac49

View File

@@ -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, &current_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);
}