Skip to content

Conversation

@calsys456
Copy link
Contributor

@calsys456 calsys456 commented Dec 12, 2025

This commit is boundled with a treeland update commit.

Summary by Sourcery

Ensure logged-in session metadata is fully propagated and simplify Treeland DDM private object handling.

Bug Fixes:

  • Include the XDG session ID when notifying about active logged-in users to downstream components handling session startup.
  • Avoid destroying an existing Treeland DDM object when updating the connector's private object pointer to prevent unintended teardown on reconnect or recovery.

This commit is boundled with a treeland update commit.
@sourcery-ai
Copy link

sourcery-ai bot commented Dec 12, 2025

Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Propagates the XDG session ID when notifying about logged-in users and adjusts Treeland DDm private object handling to avoid destroying an existing instance on reset/reconnect, addressing session start issues after DDM restart and crash recovery.

Sequence diagram for DDM restart crash recovery with XDG session propagation

sequenceDiagram
    participant DDM_Display as DDM_Display
    participant Socket as Socket
    participant SocketWriter as SocketWriter
    participant TreelandDDM as TreelandDDM
    participant SessionManager as SessionManager

    DDM_Display->>Socket: open
    DDM_Display->>SocketWriter: create with Socket
    loop for each auth in loginedSession
        DDM_Display->>Auth: isActive
        alt auth is active
            DDM_Display->>Auth: user
            DDM_Display->>Auth: xdgSessionId
            DDM_Display->>SocketWriter: write UserLoggedIn, user, xdgSessionId
            SocketWriter->>TreelandDDM: send message
            TreelandDDM->>SessionManager: ensure dde_session for xdgSessionId
        end
    end
Loading

Updated class diagram for Display Auth TreelandConnector and treeland_ddm interaction

classDiagram
    class Display {
        loginedSession() QList~Auth*~
    }

    class Auth {
        bool isActive()
        QString user()
        QString xdgSessionId()
    }

    class SocketWriter {
        SocketWriter(Socket socket)
        SocketWriter operator<<(quint32 messageType)
        SocketWriter operator<<(QString user)
        SocketWriter operator<<(QString xdgSessionId)
    }

    class TreelandConnector {
        bool isConnected()
        void setPrivateObject(treeland_ddm ddm)
        treeland_ddm m_ddm
    }

    class treeland_ddm

    Display "1" o-- "*" Auth
    Display --> SocketWriter
    TreelandConnector --> treeland_ddm
    SocketWriter --> treeland_ddm
Loading

File-Level Changes

Change Details Files
Include the XDG session ID in daemon login notifications so downstream components can correctly re-establish sessions.
  • Extend the UserLoggedIn daemon message payload to append the user’s XDG session ID when iterating over active authenticated sessions
  • Use auth->xdgSessionId() alongside auth->user() when writing to the socket to ensure receivers get full session context
src/daemon/Display.cpp
Relax TreelandConnector private object management to stop destroying the existing treeland_ddm object when a new one is set, improving reconnection and crash recovery behavior.
  • Remove the conditional call to treeland_ddm_destroy(m_ddm) inside setPrivateObject
  • Allow m_ddm to be simply reassigned, relying on external lifecycle management and avoiding premature destruction during DDM restart or recovery
src/daemon/TreelandConnector.cpp

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey there - I've reviewed your changes - here's some feedback:

  • By removing treeland_ddm_destroy(m_ddm) in setPrivateObject, the ownership/lifetime of m_ddm becomes unclear; consider documenting or restructuring this to avoid potential leaks or dangling pointers when the object is replaced.
  • The UserLoggedIn message now includes xdgSessionId; ensure all readers of this message are updated to parse the extra field (or version the message) to avoid misaligned reads or crashes on older consumers.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- By removing `treeland_ddm_destroy(m_ddm)` in `setPrivateObject`, the ownership/lifetime of `m_ddm` becomes unclear; consider documenting or restructuring this to avoid potential leaks or dangling pointers when the object is replaced.
- The `UserLoggedIn` message now includes `xdgSessionId`; ensure all readers of this message are updated to parse the extra field (or version the message) to avoid misaligned reads or crashes on older consumers.

## Individual Comments

### Comment 1
<location> `src/daemon/TreelandConnector.cpp:131` </location>
<code_context>
 }

 void TreelandConnector::setPrivateObject(struct treeland_ddm *ddm) {
-    if (m_ddm)
-        treeland_ddm_destroy(m_ddm);
     m_ddm = ddm;
 }

</code_context>

<issue_to_address>
**issue (bug_risk):** Clarify ownership/lifetime of m_ddm now that the previous instance is no longer destroyed.

By removing `treeland_ddm_destroy(m_ddm)`, `m_ddm`’s ownership semantics change. If `setPrivateObject` is called more than once, previous instances will not be destroyed here, which can cause leaks or multiple live instances unless another owner handles cleanup. Please confirm whether ownership is intentionally transferred elsewhere and that callers are not depending on `setPrivateObject` to free the old object.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

}

void TreelandConnector::setPrivateObject(struct treeland_ddm *ddm) {
if (m_ddm)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Clarify ownership/lifetime of m_ddm now that the previous instance is no longer destroyed.

By removing treeland_ddm_destroy(m_ddm), m_ddm’s ownership semantics change. If setPrivateObject is called more than once, previous instances will not be destroyed here, which can cause leaks or multiple live instances unless another owner handles cleanup. Please confirm whether ownership is intentionally transferred elsewhere and that callers are not depending on setPrivateObject to free the old object.

@deepin-ci-robot
Copy link

Hi @calsys456. Thanks for your PR.

I'm waiting for a linuxdeepin member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@calsys456
Copy link
Contributor Author

Related with linuxdeepin/treeland#643

@deepin-ci-robot
Copy link

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: calsys456, zccrs

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

@zccrs zccrs merged commit 9ddc044 into linuxdeepin:master Dec 16, 2025
9 checks passed
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.

3 participants