richardphibel / rpms / systemd

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