ctdb-common: Do not queue a packet if queue does not have valid fd
authorAmitay Isaacs <amitay@gmail.com>
Fri, 29 Sep 2017 04:23:24 +0000 (14:23 +1000)
committerMartin Schwenke <martins@samba.org>
Thu, 5 Oct 2017 03:19:21 +0000 (05:19 +0200)
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 <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
ctdb/common/ctdb_io.c

index 152d535f0e52dd7b3041e9de6836be3e3c471867..3e732e8527d9cbaa928aa95df2e309d1d1ae48b2 100644 (file)
@@ -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);