summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-dns-stream.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-01-21 17:57:43 +0100
committerLennart Poettering <lennart@poettering.net>2019-02-15 17:13:58 +0100
commit652ba568c6624bf40d735645f029d83d21bdeaa6 (patch)
tree36bf296650a0180f47d7b5502e86e15d70f61654 /src/resolve/resolved-dns-stream.c
parent57bdb749b83e26f7b972d510c2fa09d23bc3617c (diff)
downloadsystemd-652ba568c6624bf40d735645f029d83d21bdeaa6.tar.gz
stream: track type of DnsStream object
We use stream objects in four different cases: let's track them. This in particular allows us to make sure the limit on outgoing streams cannot be exhausted by having incoming streams as this means we can neatly separate the counters for all four types.
Diffstat (limited to 'src/resolve/resolved-dns-stream.c')
-rw-r--r--src/resolve/resolved-dns-stream.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c
index e29c970d51..ebafaa529c 100644
--- a/src/resolve/resolved-dns-stream.c
+++ b/src/resolve/resolved-dns-stream.c
@@ -437,7 +437,7 @@ static DnsStream *dns_stream_free(DnsStream *s) {
if (s->manager) {
LIST_REMOVE(streams, s->manager->dns_streams, s);
- s->manager->n_dns_streams--;
+ s->manager->n_dns_streams[s->type]--;
}
#if ENABLE_DNS_OVER_TLS
@@ -462,6 +462,7 @@ DEFINE_TRIVIAL_REF_UNREF_FUNC(DnsStream, dns_stream, dns_stream_free);
int dns_stream_new(
Manager *m,
DnsStream **ret,
+ DnsStreamType type,
DnsProtocol protocol,
int fd,
const union sockaddr_union *tfo_address) {
@@ -471,9 +472,13 @@ int dns_stream_new(
assert(m);
assert(ret);
+ assert(type >= 0);
+ assert(type < _DNS_STREAM_TYPE_MAX);
+ assert(protocol >= 0);
+ assert(protocol < _DNS_PROTOCOL_MAX);
assert(fd >= 0);
- if (m->n_dns_streams > DNS_STREAMS_MAX)
+ if (m->n_dns_streams[type] > DNS_STREAMS_MAX)
return -EBUSY;
s = new(DnsStream, 1);
@@ -508,7 +513,7 @@ int dns_stream_new(
(void) sd_event_source_set_description(s->timeout_event_source, "dns-stream-timeout");
LIST_PREPEND(streams, m->dns_streams, s);
- m->n_dns_streams++;
+ m->n_dns_streams[type]++;
s->manager = m;
s->fd = fd;