From: Yu Watanabe Date: Fri, 28 Jan 2022 00:01:07 +0000 (+0900) Subject: resolve: mention that dns_stream_update() needs to be called after dns_stream_take_re... X-Git-Tag: v251-rc1~409^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4aa6129897d2e8de9b275b44270c1c9da745de0e;p=thirdparty%2Fsystemd.git resolve: mention that dns_stream_update() needs to be called after dns_stream_take_read_packet() Based on the analysis by Joan Bruguera . See https://github.com/systemd/systemd/pull/22132#discussion_r793951650. --- diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index 1b2db512129..d16ea95d434 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -284,6 +284,13 @@ static int on_stream_timeout(sd_event_source *es, usec_t usec, void *userdata) { static DnsPacket *dns_stream_take_read_packet(DnsStream *s) { assert(s); + /* Note, dns_stream_update() should be called after this is called. When this is called, the + * stream may be already full and the EPOLLIN flag is dropped from the stream IO event source. + * Even this makes a room to read in the stream, this does not call dns_stream_update(), hence + * EPOLLIN flag is not set automatically. So, to read further packets from the stream, + * dns_stream_update() must be called explicitly. Currently, this is only called from + * on_stream_io_impl(), and there dns_stream_update() is called. */ + if (!s->read_packet) return NULL;