]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: pin stream while calling callbacks for it
authorLennart Poettering <lennart@poettering.net>
Tue, 4 Dec 2018 21:13:39 +0000 (22:13 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 7 Dec 2018 16:22:59 +0000 (17:22 +0100)
These callbacks might unref the stream, but we still have to access it,
let's hence ref it explicitly.

Maybe fixes: #10725

src/resolve/resolved-dns-stream.c

index d35c875e4730ac9a2f72307a5c38dbe9e2c320d2..deb5abac5befd37128eae1d6c3e78806f63fe796 100644 (file)
@@ -46,6 +46,8 @@ static int dns_stream_update_io(DnsStream *s) {
 }
 
 static int dns_stream_complete(DnsStream *s, int error) {
+        _cleanup_(dns_stream_unrefp) _unused_ DnsStream *ref = dns_stream_ref(s); /* Protect stream while we process it */
+
         assert(s);
 
 #if ENABLE_DNS_OVER_TLS
@@ -273,7 +275,7 @@ static int on_stream_timeout(sd_event_source *es, usec_t usec, void *userdata) {
 }
 
 static int on_stream_io(sd_event_source *es, int fd, uint32_t revents, void *userdata) {
-        DnsStream *s = userdata;
+        _cleanup_(dns_stream_unrefp) DnsStream *s = dns_stream_ref(userdata); /* Protect stream while we process it */
         int r;
 
         assert(s);