]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
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)
committerKarolin Seeger <kseeger@samba.org>
Wed, 25 Oct 2017 06:43:02 +0000 (08:43 +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>
(cherry picked from commit ddd97553f0a8bfaada178ec4a7460d76fa21f079)

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);