commit 64ea2a9: [Minor] Rdns: Use flags for IO channels

Vsevolod Stakhov vsevolod at highsecure.ru
Wed Jan 5 11:28:04 UTC 2022


Author: Vsevolod Stakhov
Date: 2022-01-01 16:43:37 +0000
URL: https://github.com/rspamd/rspamd/commit/64ea2a9a90d392777141eba37acb611e9fa0ba24

[Minor] Rdns: Use flags for IO channels

---
 contrib/librdns/dns_private.h | 14 +++++++++++---
 contrib/librdns/resolver.c    | 18 +++++++++---------
 2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/contrib/librdns/dns_private.h b/contrib/librdns/dns_private.h
index 19729f1e6..5d77cbebe 100644
--- a/contrib/librdns/dns_private.h
+++ b/contrib/librdns/dns_private.h
@@ -98,6 +98,16 @@ struct rdns_request {
 };
 
 
+enum rdns_io_channel_flags {
+	RDNS_CHANNEL_CONNECTED = 1u << 0u,
+	RDNS_CHANNEL_ACTIVE = 1u << 1u,
+	RDNS_CHANNEL_TCP = 1u << 2u,
+};
+
+#define IS_CHANNEL_CONNECTED(ioc) (((ioc)->flags & RDNS_CHANNEL_CONNECTED) != 0)
+#define IS_CHANNEL_ACTIVE(ioc) (((ioc)->flags & RDNS_CHANNEL_ACTIVE) != 0)
+
+
 /**
  * IO channel for a specific DNS server
  */
@@ -107,8 +117,7 @@ struct rdns_io_channel {
 	struct sockaddr *saddr;
 	socklen_t slen;
 	int sock; /**< persistent socket                                          */
-	bool active;
-	bool connected;
+	int flags; /**< see enum rdns_io_channel_flags */
 	void *async_io; /** async opaque ptr */
 	struct rdns_request *requests; /**< requests in flight                                         */
 	uint64_t uses;
@@ -131,7 +140,6 @@ struct rdns_fake_reply {
 
 struct rdns_resolver {
 	struct rdns_server *servers;
-	struct rdns_io_channel *io_channels; /**< hash of io chains indexed by socket        */
 	struct rdns_async_context *async; /** async callbacks */
 	void *periodic; /** periodic event for resolver */
 	struct rdns_upstream_context *ups;
diff --git a/contrib/librdns/resolver.c b/contrib/librdns/resolver.c
index a0f09a294..b100322b1 100644
--- a/contrib/librdns/resolver.c
+++ b/contrib/librdns/resolver.c
@@ -68,7 +68,7 @@ rdns_send_request (struct rdns_request *req, int fd, bool new_req)
 	}
 
 	if (resolver->curve_plugin == NULL) {
-		if (!req->io->connected) {
+		if (!IS_CHANNEL_CONNECTED(req->io)) {
 			r = sendto (fd, req->packet, req->pos, 0,
 					req->io->saddr,
 					req->io->slen);
@@ -78,7 +78,7 @@ rdns_send_request (struct rdns_request *req, int fd, bool new_req)
 		}
 	}
 	else {
-		if (!req->io->connected) {
+		if (!IS_CHANNEL_CONNECTED(req->io)) {
 			r = resolver->curve_plugin->cb.curve_plugin.send_cb (req,
 					resolver->curve_plugin->data,
 					req->io->saddr,
@@ -111,7 +111,7 @@ rdns_send_request (struct rdns_request *req, int fd, bool new_req)
 			return -1;
 		}
 	}
-	else if (!req->io->connected) {
+	else if (!IS_CHANNEL_CONNECTED(req->io)) {
 		/* Connect socket */
 		r = connect (fd, req->io->saddr, req->io->slen);
 
@@ -120,7 +120,7 @@ rdns_send_request (struct rdns_request *req, int fd, bool new_req)
 					strerror (errno), serv->name);
 		}
 		else {
-			req->io->connected = true;
+			req->io->flags |= RDNS_CHANNEL_CONNECTED;
 		}
 	}
 
@@ -356,7 +356,7 @@ rdns_process_timer (void *arg)
 		return;
 	}
 
-	if (!req->io->active || req->retransmits == 1) {
+	if (!IS_CHANNEL_ACTIVE(req->io) || req->retransmits == 1) {
 
 		if (resolver->ups) {
 			cnt = resolver->ups->count (resolver->ups->data);
@@ -368,7 +368,7 @@ rdns_process_timer (void *arg)
 			}
 		}
 
-		if (!req->io->active || cnt > 1) {
+		if (!IS_CHANNEL_ACTIVE(req->io) || cnt > 1) {
 			/* Do not reschedule IO requests on inactive sockets */
 			rdns_debug ("reschedule request with id: %d", (int)req->id);
 			rdns_request_unschedule (req);
@@ -493,7 +493,7 @@ rdns_process_ioc_refresh (void *arg)
 						continue;
 					}
 					nioc->srv = serv;
-					nioc->active = true;
+					nioc->flags = RDNS_CHANNEL_ACTIVE;
 					nioc->resolver = resolver;
 					nioc->async_io = resolver->async->add_read (resolver->async->data,
 							nioc->sock, nioc);
@@ -501,7 +501,7 @@ rdns_process_ioc_refresh (void *arg)
 					serv->io_channels[i] = nioc;
 					rdns_debug ("scheduled io channel for server %s to be refreshed after "
 							"%lu usages", serv->name, (unsigned long)ioc->uses);
-					ioc->active = false;
+					ioc->flags &= ~RDNS_CHANNEL_ACTIVE;
 					REF_RELEASE (ioc);
 				}
 			}
@@ -893,10 +893,10 @@ rdns_resolver_init (struct rdns_resolver *resolver)
 					&ioc->saddr, &ioc->slen);
 
 			if (ioc->sock == -1) {
-				ioc->active = false;
 				rdns_err ("cannot open socket to %s:%d %s",
 						serv->name, serv->port, strerror (errno));
 				free (ioc);
+
 				return false;
 			}
 			else {


More information about the Commits mailing list