Skip to content

fix(sd-journal): check sd-event state before setting up post change timer - #428

Open
deepin-ci-robot wants to merge 1 commit into
deepin-community:masterfrom
deepin-ci-robot:backport/fix-sd-journal-check-sd-event-state-before-post-change-timer
Open

fix(sd-journal): check sd-event state before setting up post change timer#428
deepin-ci-robot wants to merge 1 commit into
deepin-community:masterfrom
deepin-ci-robot:backport/fix-sd-journal-check-sd-event-state-before-post-change-timer

Conversation

@deepin-ci-robot

Copy link
Copy Markdown
Contributor

Problem Before the Change

journal_file_enable_post_change_timer() unconditionally installs an sd-event timer, even when the event loop is already exiting (SD_EVENT_EXITING) or has finished (SD_EVENT_FINISHED). Setting up a timer on a dying event loop leaves the journal change posting in a broken state (see upstream issue #30644).

What This PR Changes

Backports upstream systemd commit 5b201ffb1e72 ("sd-journal: check sd-event state before setting up post change timer"):

  • journal_file_enable_post_change_timer() now checks sd_event_get_state() first and safely does nothing (returns 0) when the event loop is EXITING or FINISHED; the caller then posts the change explicitly via journal_file_post_change() at the end of journal_file_append_entry().
  • The success return value changes from 0 to 1 to distinguish "timer registered" from "timer not registered", mirroring the existing check in schedule_post_change().

Problem Solved After the Change

When journald shuts down, the post-change timer is no longer installed on a finished event loop; the pending journal file change is posted synchronously instead, avoiding the race reported in upstream issue #30644.

Changes

  • Add debian/patches/fix-sd-journal-check-sd-event-state-before-post-change-timer.patch
  • Modify debian/patches/series
  • Modify debian/changelog

Upstream

systemd/systemd@5b201ff

Upstream PR: systemd/systemd#30654

Generated-By: glm-5.3-flash
Co-Authored-By: deepin-ci-robot packages@deepin.org

…imer

The similar check already exists in schedule_post_change().

The function is currently called at two places.
- journal_file_open() in sd-journal:
  In this case, if the timer is not set up, then journal_file_post_change()
  will be called at the end of journal_file_append_entry(). So, the necessary
  task will be done sequentially when an journal entry is stored to the opened
  journal file. That is desired when the function is called at outside of the
  event loop.
- server_open_journal() in journald:
  This is not called after we exit the event loop.

So, we can safely do nothing in the function if the event loop is being
finished or already finished.

Fixes #30644.

Changes:
  - Add debian/patches/fix-sd-journal-check-sd-event-state-before-post-change-timer.patch
  - Modify debian/patches/series
  - Modify debian/changelog

Upstream: systemd/systemd@5b201ff

Generated-By: glm-5.3-flash
Co-Authored-By: deepin-ci-robot <packages@deepin.org>
@deepin-ci-robot

Copy link
Copy Markdown
Contributor Author

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign zccrs for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

TAG Bot

TAG: 255.2-4deepin68
EXISTED: no
DISTRIBUTION: unstable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant