]> git.ipfire.org Git - thirdparty/FORT-validator.git/commitdiff
Turn rtr_stream pollin, claimed and eos into flags
authorAlberto Leiva Popper <ydahhrk@gmail.com>
Wed, 8 Jul 2026 16:55:18 +0000 (10:55 -0600)
committerAlberto Leiva Popper <ydahhrk@gmail.com>
Wed, 8 Jul 2026 16:55:18 +0000 (10:55 -0600)
pollin is new.

src/rtr/pdu_stream.c
src/rtr/pdu_stream.h
src/rtr/rtr.c

index d2b791149e34b9b0586373cc84207240c48fca45..d0e7cf36afcd2faa8c65b35314cd74e473ca75c2 100644 (file)
@@ -40,18 +40,16 @@ struct pdu_stream *pdustream_create(int fd, char const *addr)
 
        result->fd = fd;
        strcpy(result->addr, addr);
+       result->flags = 0;
        result->rtr_version = -1;
        result->session = -1;
 
        result->start = result->buffer;
        result->end = result->buffer;
 
-       result->claimed = false;
        TAILQ_INIT(&result->requests);
        result->reqcount = 0;
 
-       result->eos = false;
-
        return result;
 }
 
index 7e917ff17e47a2f2c03758a8ecb3fdeada3fee4c..93acd396993ef73d8c123f17726a20044502167e 100644 (file)
@@ -8,9 +8,21 @@
 
 struct rtr_request;
 
+#define PSF_POLLIN  (1 << 0) /* needs to be claimed? */
+#define PSF_CLAIMED (1 << 1) /* thread currently handling requests? */
+#define PSF_EOS     (1 << 2) /* end of (input) stream? */
+
+#define PS_POLLIN(s) ((s)->flags & PSF_POLLIN)
+#define PS_CLAIMED(s) ((s)->flags & PSF_CLAIMED)
+#define PS_EOS(s) ((s)->flags & PSF_EOS)
+
+#define PS_ENABLE(s, f) (s)->flags |= PSF_##f
+#define PS_DISABLE(s, f) (s)->flags &= ~PSF_##f
+
 struct pdu_stream { /* It's an *input* stream. */
        int fd;
        char addr[INET6_ADDRSTRLEN];    /* Printable address of the client. */
+       int flags;
        int rtr_version;                /* -1: unset; > 0: version number */
        int session;                    /* -1: unset; > 0: session */
 
@@ -19,11 +31,8 @@ struct pdu_stream { /* It's an *input* stream. */
        unsigned char *start;
        unsigned char *end;
 
-       bool claimed;
        TAILQ_HEAD(, rtr_request) requests; /* No more than 4 nodes */
        unsigned int reqcount;
-
-       bool eos; /* end of (input) stream */
 };
 
 struct rtr_request {
index 68bee7b9abd1258e00bc1375cee1304a73773556..1c7f4b727c23290235e89c8071759c275ece07a2 100644 (file)
@@ -345,8 +345,8 @@ claim_client(void)
 
        ARRAYLIST_FOREACH(&clients, _client) {
                client = *_client;
-               if (!TAILQ_EMPTY(&client->requests) && !client->claimed) {
-                       client->claimed = true;
+               if (!TAILQ_EMPTY(&client->requests) && !PS_CLAIMED(client)) {
+                       PS_ENABLE(client, CLAIMED);
                        return client;
                }
        }
@@ -409,7 +409,7 @@ handle_clients(void *arg)
                        mutex_lock(&lock);
                }
 
-               client->claimed = false;
+               PS_DISABLE(client, CLAIMED);
        }
 
        mutex_unlock(&lock);
@@ -590,7 +590,7 @@ apply_pollfds(struct pollfd *pollfds, size_t nclients)
 
                /* PR_DEBUG_MSG("pfd:%d client:%d", pfd->fd, client->fd); */
 
-               if (!client->claimed && client->eos) {
+               if (!PS_CLAIMED(client) && PS_EOS(client)) {
                        pdustream_destroy(client);
                        clients.array[i] = NULL;
                }
@@ -607,7 +607,7 @@ disable_read(struct pdu_stream *stream)
                pr_op_warn("Can't shut down read end of client socket: %s",
                    strerror(errno));
        pdustream_clear_requests(stream);
-       stream->eos = true;
+       PS_ENABLE(stream, EOS);
 }
 
 static enum poll_verdict
@@ -628,7 +628,7 @@ fddb_poll(void)
        ARRAYLIST_FOREACH_IDX(&clients, i)
                init_pollfd(
                    &pollfds[servers.len + i],
-                   clients.array[i]->eos ? -1 : clients.array[i]->fd
+                   PS_EOS(clients.array[i]) ? -1 : clients.array[i]->fd
                );
 
        error = poll(pollfds, servers.len + clients.len, 1000);