kms: lock during screen conf changes
This commit is contained in:
parent
bb7a6a7113
commit
e34a289c01
10 changed files with 747 additions and 382 deletions
|
|
@ -1,6 +1,9 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::{state::BackendData, utils::prelude::*};
|
||||
use crate::{
|
||||
backend::kms::MaybeLockedDevice,
|
||||
state::{BackendData, State},
|
||||
};
|
||||
use smithay::{
|
||||
reexports::wayland_server::{protocol::wl_buffer::WlBuffer, Resource},
|
||||
wayland::buffer::BufferHandler,
|
||||
|
|
|
|||
|
|
@ -27,10 +27,11 @@ impl DrmLeaseHandler for State {
|
|||
request: DrmLeaseRequest,
|
||||
) -> Result<DrmLeaseBuilder, LeaseRejected> {
|
||||
let kms = self.backend.kms();
|
||||
let backend = kms
|
||||
let mut backend = kms
|
||||
.drm_devices
|
||||
.get_mut(&node)
|
||||
.ok_or(LeaseRejected::default())?;
|
||||
.ok_or(LeaseRejected::default())?
|
||||
.lock();
|
||||
let mut renderer = match kms.api.single_renderer(&backend.render_node) {
|
||||
Ok(renderer) => renderer,
|
||||
Err(err) => {
|
||||
|
|
@ -108,6 +109,7 @@ impl DrmLeaseHandler for State {
|
|||
fn lease_destroyed(&mut self, node: DrmNode, lease: u32) {
|
||||
let kms = self.backend.kms();
|
||||
if let Some(backend) = kms.drm_devices.get_mut(&node) {
|
||||
let mut backend = backend.lock();
|
||||
backend.active_leases.retain(|l| l.id() != lease);
|
||||
|
||||
if backend.active_leases.is_empty() {
|
||||
|
|
|
|||
|
|
@ -145,7 +145,8 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
let res = self.backend.apply_config_for_outputs(
|
||||
let mut backend = self.backend.lock();
|
||||
let res = backend.apply_config_for_outputs(
|
||||
test_only,
|
||||
&self.common.event_loop_handle,
|
||||
self.common.config.dynamic_conf.screen_filter(),
|
||||
|
|
@ -168,7 +169,7 @@ impl State {
|
|||
}
|
||||
}
|
||||
if !test_only {
|
||||
if let Err(err) = self.backend.apply_config_for_outputs(
|
||||
if let Err(err) = backend.apply_config_for_outputs(
|
||||
false,
|
||||
&self.common.event_loop_handle,
|
||||
self.common.config.dynamic_conf.screen_filter(),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue