Skip to content

Commit

Permalink
resolve: mention that dns_stream_update() needs to be called after dn…
Browse files Browse the repository at this point in the history
…s_stream_take_read_packet()

Based on the analysis by Joan Bruguera <joanbrugueram@gmail.com>.
See systemd/systemd#22132 (comment).

(cherry picked from commit 4aa6129)
  • Loading branch information
yuwata committed Mar 17, 2022
1 parent b2f82f6 commit d65808e
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/resolve/resolved-dns-stream.c
Expand Up @@ -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;

Expand Down

0 comments on commit d65808e

Please sign in to comment.