-
Notifications
You must be signed in to change notification settings - Fork 16
fix: fix dde-session not started after ddm restart & crash recovery #54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This commit is boundled with a treeland update commit.
Reviewer's guide (collapsed on small PRs)Reviewer's GuidePropagates 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 propagationsequenceDiagram
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
Updated class diagram for Display Auth TreelandConnector and treeland_ddm interactionclassDiagram
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
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this 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)insetPrivateObject, the ownership/lifetime ofm_ddmbecomes unclear; consider documenting or restructuring this to avoid potential leaks or dangling pointers when the object is replaced. - The
UserLoggedInmessage now includesxdgSessionId; 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>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) |
There was a problem hiding this comment.
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.
|
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 Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. DetailsInstructions 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. |
|
Related with linuxdeepin/treeland#643 |
|
[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. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
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: