← luna

Commit 017f90a

0
files
+0
added
-0
deleted
@@ -68,19 +68,21 @@ pub fn spawn(
68 68 /// trzyma master DRM. Bez ponowień Selene od razu widzi `MasterBusy` i zostawia czarny
69 69 /// ekran. Czekamy do ~5 s, aż greeter zwolni mastera.
70 70 fn open_drm_waiting() -> Result<DrmBackend, DrmError> {
71 - match DrmBackend::open() {
72 - Err(DrmError::MasterBusy) => {
73 - for _ in 0..50 {
74 - std::thread::sleep(Duration::from_millis(100));
75 - match DrmBackend::open() {
76 - Err(DrmError::MasterBusy) => continue,
77 - other => return other,
78 - }
79 - }
80 - Err(DrmError::MasterBusy)
71 + // LightDM potrafi wystartować sesję, zanim greeter (Xorg) zwolni ekran — bywa, że
72 + // master jest już wolny, ale CRTC-e jeszcze zajęte (modeset się nie udaje). Dlatego
73 + // próbujemy przez ~5 s niezależnie od powodu (master/zasoby/modeset).
74 + let mut last = DrmError::MasterBusy;
75 + for attempt in 0..50 {
76 + match DrmBackend::open() {
77 + Ok(backend) => return Ok(backend),
78 + Err(e) => last = e,
79 + }
80 + if attempt == 0 && std::env::var("SELENE_STATS").is_ok() {
81 + eprintln!("selene/drm: init nieudany ({last:?}) — czekam na zwolnienie ekranu…");
81 82 }
82 - other => other,
83 + std::thread::sleep(Duration::from_millis(100));
83 84 }
85 + Err(last)
84 86 }
85 87
86 88 /// Uruchamia wątek wyjścia DRM/KMS — renderuje scenę do buforów i skanuje na monitorach.