dryang / rpms / systemd

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