(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; time_t seen;
unsigned long flags; unsigned long flags;
#define SLAVE_F_DEAD 0x1 #define SLAVE_F_DEAD 0x1
#define SLAVE_F_AYT 0x2
struct slave *next; struct slave *next;
}; };
@@ -124,6 +125,7 @@ check_acl (krb5_context context, const char *name)
static void static void
slave_seen(slave *s) slave_seen(slave *s)
{ {
s->flags &= ~SLAVE_F_AYT;
s->seen = time(NULL); s->seen = time(NULL);
} }
@@ -365,9 +367,11 @@ send_are_you_there (krb5_context context, slave *s)
char buf[4]; char buf[4];
int ret; int ret;
if (s->flags & SLAVE_F_DEAD) if (s->flags & (SLAVE_F_DEAD|SLAVE_F_AYT))
return 0; return 0;
s->flags |= SLAVE_F_AYT;
data.data = buf; data.data = buf;
data.length = 4; data.length = 4;
@@ -739,17 +743,19 @@ main(int argc, char **argv)
continue; continue;
} }
--ret; --ret;
assert(ret >= 0);
old_version = current_version; old_version = current_version;
kadm5_log_get_version_fd (log_fd, &current_version); kadm5_log_get_version_fd (log_fd, &current_version);
for (p = slaves; p != NULL; p = p->next) for (p = slaves; p != NULL; p = p->next)
send_diffs (context, p, log_fd, database, current_version); 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) if (p->flags & SLAVE_F_DEAD)
continue; continue;
if (FD_ISSET(p->fd, &readset)) { if (ret && FD_ISSET(p->fd, &readset)) {
--ret; --ret;
assert(ret >= 0);
if(process_msg (context, p, log_fd, database, current_version)) if(process_msg (context, p, log_fd, database, current_version))
slave_dead(p); slave_dead(p);
} else if (slave_gone_p (p)) } else if (slave_gone_p (p))
@@ -761,6 +767,7 @@ main(int argc, char **argv)
if (ret && FD_ISSET(listen_fd, &readset)) { if (ret && FD_ISSET(listen_fd, &readset)) {
add_slave (context, keytab, &slaves, listen_fd); add_slave (context, keytab, &slaves, listen_fd);
--ret; --ret;
assert(ret >= 0);
} }
write_stats(context, slaves, current_version); write_stats(context, slaves, current_version);
} }