984f77
From 3f3b00c8753fb591a4cd7b770ce069d455dcc4d6 Mon Sep 17 00:00:00 2001
984f77
From: Lennart Poettering <lennart@poettering.net>
984f77
Date: Tue, 4 Dec 2018 22:13:39 +0100
984f77
Subject: [PATCH] resolved: pin stream while calling callbacks for it
984f77
984f77
These callbacks might unref the stream, but we still have to access it,
984f77
let's hence ref it explicitly.
984f77
984f77
Maybe fixes: #10725
984f77
984f77
(cherry picked from commit d973d94dec349fb676fdd844f6fe2ada3538f27c)
984f77
984f77
Resolves: #2110549
984f77
---
984f77
 src/resolve/resolved-dns-stream.c | 4 +++-
984f77
 1 file changed, 3 insertions(+), 1 deletion(-)
984f77
984f77
diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c
984f77
index 555e200a23..ca0313d1d7 100644
984f77
--- a/src/resolve/resolved-dns-stream.c
984f77
+++ b/src/resolve/resolved-dns-stream.c
984f77
@@ -42,6 +42,8 @@ static int dns_stream_update_io(DnsStream *s) {
984f77
 }
984f77
 
984f77
 static int dns_stream_complete(DnsStream *s, int error) {
984f77
+        _cleanup_(dns_stream_unrefp) _unused_ DnsStream *ref = dns_stream_ref(s); /* Protect stream while we process it */
984f77
+
984f77
         assert(s);
984f77
 
984f77
 #if ENABLE_DNS_OVER_TLS
984f77
@@ -316,7 +318,7 @@ static int on_stream_timeout(sd_event_source *es, usec_t usec, void *userdata) {
984f77
 }
984f77
 
984f77
 static int on_stream_io(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
984f77
-        DnsStream *s = userdata;
984f77
+        _cleanup_(dns_stream_unrefp) DnsStream *s = dns_stream_ref(userdata); /* Protect stream while we process it */
984f77
         int r;
984f77
 
984f77
         assert(s);