From 9988043b6ba96b67bdb55fe5d5c7a46e0a993e3f Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Wed, 15 Nov 2023 21:44:33 +0100 Subject: [PATCH 1/2] sd-journal: don't assert on invalid field Also, field_is_valid(field) already does isempty(field), so drop that as well. $ SYSTEMD_LOG_LEVEL=debug journalctl -o verbose -F foo-bar-baz ... Assertion 'field_is_valid(field)' failed at src/libsystemd/sd-journal/sd-journal.c:2789, function sd_journal_query_unique(). Ignoring. Failed to query unique data objects: Invalid argument --- src/libsystemd/sd-journal/sd-journal.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c index eb35b9d9c4..f2b7a379c0 100644 --- a/src/libsystemd/sd-journal/sd-journal.c +++ b/src/libsystemd/sd-journal/sd-journal.c @@ -3121,8 +3121,9 @@ _public_ int sd_journal_query_unique(sd_journal *j, const char *field) { assert_return(j, -EINVAL); assert_return(!journal_origin_changed(j), -ECHILD); - assert_return(!isempty(field), -EINVAL); - assert_return(field_is_valid(field), -EINVAL); + + if (!field_is_valid(field)) + return -EINVAL; r = free_and_strdup(&j->unique_field, field); if (r < 0) From 236cb016222288bdf5be5f2d8f9e81d6e4a6adab Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Wed, 15 Nov 2023 22:21:16 +0100 Subject: [PATCH 2/2] login: mark the Display property as "emits change" With the introduction of SetDisplay() method in 4885d7490b2 the Display property emits a "properties changed" message every time the display is changed using this method, so mark it appropriately. Caught by systemd/systemd#30029: systemd-logind[1366]: Got message type=method_call sender=:1.165 destination=org.freedesktop.login1 path=/org/freedesktop/login1/session/_310 interface=org.freedesktop.login1.Session member=SetDisplay cookie=8 reply_cookie=0 signature=s error-name=n/a error-message=n/a systemd-logind[1366]: Assertion 'v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE || v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION' failed at src/libsystemd/sd-bus/bus-objects.c:2141, function emit_properties_changed_on_interface(). Ignoring. Follow-up to 4885d7490b2. --- man/org.freedesktop.login1.xml | 1 - src/login/logind-session-dbus.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/man/org.freedesktop.login1.xml b/man/org.freedesktop.login1.xml index 2c1b9118ea..ba1614be4e 100644 --- a/man/org.freedesktop.login1.xml +++ b/man/org.freedesktop.login1.xml @@ -1161,7 +1161,6 @@ node /org/freedesktop/login1/session/1 { readonly (so) Seat = ...; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s TTY = '...'; - @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly s Display = '...'; @org.freedesktop.DBus.Property.EmitsChangedSignal("const") readonly b Remote = ...; diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c index d9d6cb2856..ad4e5c5f6d 100644 --- a/src/login/logind-session-dbus.c +++ b/src/login/logind-session-dbus.c @@ -875,7 +875,7 @@ static const sd_bus_vtable session_vtable[] = { SD_BUS_PROPERTY("VTNr", "u", NULL, offsetof(Session, vtnr), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("Seat", "(so)", property_get_seat, 0, SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("TTY", "s", NULL, offsetof(Session, tty), SD_BUS_VTABLE_PROPERTY_CONST), - SD_BUS_PROPERTY("Display", "s", NULL, offsetof(Session, display), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("Display", "s", NULL, offsetof(Session, display), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE), SD_BUS_PROPERTY("Remote", "b", bus_property_get_bool, offsetof(Session, remote), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("RemoteHost", "s", NULL, offsetof(Session, remote_host), SD_BUS_VTABLE_PROPERTY_CONST), SD_BUS_PROPERTY("RemoteUser", "s", NULL, offsetof(Session, remote_user), SD_BUS_VTABLE_PROPERTY_CONST),