diff --git a/ctdb/common/ctdb_io.c b/ctdb/common/ctdb_io.c index 872da967097..256b021bed6 100644 --- a/ctdb/common/ctdb_io.c +++ b/ctdb/common/ctdb_io.c @@ -170,9 +170,11 @@ static void queue_io_write(struct ctdb_queue *queue) } if (n == -1 && errno != EAGAIN && errno != EWOULDBLOCK) { + talloc_free(queue->fde); + queue->fde = NULL; + queue->fd = -1; event_add_timed(queue->ctdb->ev, queue, timeval_zero(), queue_dead, queue); - EVENT_FD_NOT_WRITEABLE(queue->fde); return; } if (n <= 0) return; @@ -232,6 +234,9 @@ int ctdb_queue_send(struct ctdb_queue *queue, uint8_t *data, uint32_t length) !(queue->ctdb->flags & CTDB_FLAG_TORTURE)) { ssize_t n = write(queue->fd, data, length2); if (n == -1 && errno != EAGAIN && errno != EWOULDBLOCK) { + talloc_free(queue->fde); + queue->fde = NULL; + queue->fd = -1; event_add_timed(queue->ctdb->ev, queue, timeval_zero(), queue_dead, queue); /* yes, we report success, as the dead node is diff --git a/ctdb/tcp/tcp_connect.c b/ctdb/tcp/tcp_connect.c index b3c51845273..2ae41f31bd1 100644 --- a/ctdb/tcp/tcp_connect.c +++ b/ctdb/tcp/tcp_connect.c @@ -49,9 +49,7 @@ void ctdb_tcp_tnode_cb(uint8_t *data, size_t cnt, void *private_data) /* start a new connect cycle to try to re-establish the link */ - close(tnode->fd); ctdb_queue_set_fd(tnode->queue, -1); - tnode->fd = -1; event_add_timed(node->ctdb->ev, node, timeval_zero(), ctdb_tcp_node_connect, node); } @@ -157,6 +155,7 @@ void ctdb_tcp_node_connect(struct event_context *ev, struct timed_event *te, errno != EINPROGRESS) { /* try again once a second */ close(tnode->fd); + tnode->fd = -1; event_add_timed(ctdb->ev, node, timeval_current_ofs(1, 0), ctdb_tcp_node_connect, node); return;