mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 04:34:03 +02:00
rust_binder: schedule NodeDeath outside of node_refs lock
There's no reason to hold the node_refs lock while scheduling the NodeDeath to the thread todo list, so don't. The call to set_cleared() is kept under the lock so that the state update is kept atomic. Reviewed-by: Matthew Maurer <mmaurer@google.com> Signed-off-by: Alice Ryhl <aliceryhl@google.com> Link: https://patch.msgid.link/20260615-binder-noderefs-spin-v3-3-3235f5a3e0a0@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
521eae8326
commit
56c650167e
|
|
@ -1289,7 +1289,10 @@ pub(crate) fn clear_death(&self, reader: &mut UserSliceReader, thread: &Thread)
|
|||
|
||||
// Update state and determine if we need to queue a work item. We only need to do it when
|
||||
// the node is not dead or if the user already completed the death notification.
|
||||
if death.set_cleared(false) {
|
||||
let should_schedule = death.set_cleared(false);
|
||||
drop(refs);
|
||||
|
||||
if should_schedule {
|
||||
if let Some(death) = ListArc::try_from_arc_or_drop(death) {
|
||||
let _ = thread.push_work_if_looper(death);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user