(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:
@@ -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, ¤t_version);
|
kadm5_log_get_version_fd (log_fd, ¤t_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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user