Slaves are set to unregistered state once disconnected

It was possible that the same slave was disconnected multiple times
before the slave DCB was closed.
This commit is contained in:
Markus Makela 2015-12-09 17:54:54 +02:00 committed by Johan Wikman
parent 9a3aae64ce
commit 000a044da6

View File

@ -2656,7 +2656,8 @@ blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int se
while (sptr)
{
/* don't examine slaves with state = 0 */
if (sptr->state != 0 && sptr->serverid == server_id)
if ((sptr->state == BLRS_REGISTERED || sptr->state == BLRS_DUMPING) &&
sptr->serverid == server_id)
{
/* server_id found */
server_found = 1;
@ -2670,6 +2671,7 @@ blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int se
/* send server_id with disconnect state to client */
n = blr_slave_send_disconnected_server(router, slave, server_id, 1);
sptr->state = BLRS_UNREGISTERED;
dcb_close(sptr->dcb);
break;
@ -2731,7 +2733,7 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
while (sptr)
{
/* skip servers with state = 0 */
if (sptr->state != 0)
if (sptr->state == BLRS_REGISTERED || sptr->state == BLRS_DUMPING)
{
sprintf(server_id, "%d", sptr->serverid);
sprintf(state, "disconnected");
@ -2768,6 +2770,7 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
slave->dcb->func.write(slave->dcb, pkt);
sptr->state = BLRS_UNREGISTERED;
dcb_close(sptr->dcb);
}