Hello,
I am updating a system from systemd v250 to systemd v255. There is some small utility on the system using sd_journal_add_match() to react on coredumps being printed to the journal:
sd_journal_open(...);
poll_fd = sd_journal_get_fd(...);
sd_journal_seek_tail(...);
sd_journal_previous(...);
sd_journal_add_match(..., "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1");
poll(poll_fd)
When poll returns, sd_journal_process() is called, followed by sd_journal_next() in case sd_journal_process() does not return SD_JOURNAL_NOP
This is very similar to https://github.com/systemd/systemd/blob/main/man/journal-iterate-poll.c , except that there is a call to sd_journal_add_match, and that sd_journal_next is called after poll().
This used to work with systemd v250, however it does not work with v255 (sd_journal_next() always returns 0 which means "no new data"). I bisected it, and the commit after which it stops working is https://github.com/systemd/systemd/commit/7a4ee861615101ddd2f95056cf30e69e41da86ce
What is the correct way to read the journal entry after poll() returns, meaning a match as configured by sd_journal_add_match() was found? Should sd_journal_get_data() be called directly instead of sd_journal_next()?
I'd like to extend https://github.com/systemd/systemd/blob/main/man/journal-iterate-poll.c to make the proper way to do this clearer, in case sd_journal_next() is not the correct way.
Thanks,
Étienne
I am updating a system from systemd v250 to systemd v255. There is some small utility on the system using sd_journal_add_match() to react on coredumps being printed to the journal:
sd_journal_open(...);
poll_fd = sd_journal_get_fd(...);
sd_journal_seek_tail(...);
sd_journal_previous(...);
sd_journal_add_match(..., "MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1");
poll(poll_fd)
When poll returns, sd_journal_process() is called, followed by sd_journal_next() in case sd_journal_process() does not return SD_JOURNAL_NOP
This is very similar to https://github.com/systemd/systemd/blob/main/man/journal-iterate-poll.c , except that there is a call to sd_journal_add_match, and that sd_journal_next is called after poll().
This used to work with systemd v250, however it does not work with v255 (sd_journal_next() always returns 0 which means "no new data"). I bisected it, and the commit after which it stops working is https://github.com/systemd/systemd/commit/7a4ee861615101ddd2f95056cf30e69e41da86ce
What is the correct way to read the journal entry after poll() returns, meaning a match as configured by sd_journal_add_match() was found? Should sd_journal_get_data() be called directly instead of sd_journal_next()?
I'd like to extend https://github.com/systemd/systemd/blob/main/man/journal-iterate-poll.c to make the proper way to do this clearer, in case sd_journal_next() is not the correct way.
Thanks,
Étienne