From: Alberto Leiva Popper Date: Wed, 8 Jul 2026 16:55:18 +0000 (-0600) Subject: Turn rtr_stream pollin, claimed and eos into flags X-Git-Tag: 1.7.0.experimental~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d0603a70d1b1d9421b2afd7e5f703c8af837d673;p=thirdparty%2FFORT-validator.git Turn rtr_stream pollin, claimed and eos into flags pollin is new. --- diff --git a/src/rtr/pdu_stream.c b/src/rtr/pdu_stream.c index d2b79114..d0e7cf36 100644 --- a/src/rtr/pdu_stream.c +++ b/src/rtr/pdu_stream.c @@ -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; } diff --git a/src/rtr/pdu_stream.h b/src/rtr/pdu_stream.h index 7e917ff1..93acd396 100644 --- a/src/rtr/pdu_stream.h +++ b/src/rtr/pdu_stream.h @@ -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 { diff --git a/src/rtr/rtr.c b/src/rtr/rtr.c index 68bee7b9..1c7f4b72 100644 --- a/src/rtr/rtr.c +++ b/src/rtr/rtr.c @@ -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);