From c9fa0e9615cc58ee102c1192c4c55fa3f952e15d Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Fri, 29 Sep 2017 14:23:24 +1000 Subject: [PATCH] ctdb-common: Do not queue a packet if queue does not have valid fd BUG: https://bugzilla.samba.org/show_bug.cgi?id=13056 The only time a ctdb_queue is created without valid fd is when CTDB is trying to establish connections with other nodes in the cluster. All the other uses always create a ctdb_queue with valid fd. This avoids queueing up packets for dead nodes or nodes that are not running in the cluster and stops consuming memory. Signed-off-by: Amitay Isaacs Reviewed-by: Martin Schwenke (cherry picked from commit ddd97553f0a8bfaada178ec4a7460d76fa21f079) --- ctdb/common/ctdb_io.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ctdb/common/ctdb_io.c b/ctdb/common/ctdb_io.c index 152d535f0e5..3e732e8527d 100644 --- a/ctdb/common/ctdb_io.c +++ b/ctdb/common/ctdb_io.c @@ -300,6 +300,11 @@ int ctdb_queue_send(struct ctdb_queue *queue, uint8_t *data, uint32_t length) struct ctdb_queue_pkt *pkt; uint32_t length2, full_length; + /* If the queue does not have valid fd, no point queueing a packet */ + if (queue->fd == -1) { + return 0; + } + if (queue->alignment) { /* enforce the length and alignment rules from the tcp packet allocator */ length2 = (length+(queue->alignment-1)) & ~(queue->alignment-1); -- 2.47.2