fix(vdisplay): call life.acquire() outside debug_assert (release no-op)
The pooled entry's lifecycle transition was inside debug_assert_eq!, whose arguments don't evaluate in release builds — so acquire() never ran, the entry stayed Idle, and release saw Noop → immediate teardown (no keep-alive). Caught on-glass on the CachyOS box. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -136,7 +136,7 @@ mod linux {
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
use super::DisplayInfo;
|
use super::DisplayInfo;
|
||||||
use crate::vdisplay::lifecycle::{self, Acquire, Release};
|
use crate::vdisplay::lifecycle::{self, Release};
|
||||||
use crate::vdisplay::policy::{self, Linger};
|
use crate::vdisplay::policy::{self, Linger};
|
||||||
use crate::vdisplay::{Mode, VirtualDisplay, VirtualOutput};
|
use crate::vdisplay::{Mode, VirtualDisplay, VirtualOutput};
|
||||||
|
|
||||||
@@ -257,7 +257,8 @@ mod linux {
|
|||||||
) && e.backend == backend
|
) && e.backend == backend
|
||||||
&& e.mode == mode
|
&& e.mode == mode
|
||||||
}) {
|
}) {
|
||||||
debug_assert_eq!(e.life.acquire(), Acquire::Reuse);
|
// Lingering/Pinned → Active (Acquire::Reuse); side effect matters, value is known.
|
||||||
|
e.life.acquire();
|
||||||
let gen = r.gen.fetch_add(1, Ordering::Relaxed);
|
let gen = r.gen.fetch_add(1, Ordering::Relaxed);
|
||||||
e.gen = gen;
|
e.gen = gen;
|
||||||
let out = output_for(e.node_id, e.preferred_mode, gen);
|
let out = output_for(e.node_id, e.preferred_mode, gen);
|
||||||
@@ -288,7 +289,7 @@ mod linux {
|
|||||||
let preferred_mode = real.preferred_mode;
|
let preferred_mode = real.preferred_mode;
|
||||||
let gen = r.gen.fetch_add(1, Ordering::Relaxed);
|
let gen = r.gen.fetch_add(1, Ordering::Relaxed);
|
||||||
let mut life = lifecycle::State::default();
|
let mut life = lifecycle::State::default();
|
||||||
debug_assert_eq!(life.acquire(), Acquire::Create);
|
life.acquire(); // Idle → Active{refs:1} (Acquire::Create)
|
||||||
let entry = Entry {
|
let entry = Entry {
|
||||||
life,
|
life,
|
||||||
keepalive: real.keepalive,
|
keepalive: real.keepalive,
|
||||||
|
|||||||
Reference in New Issue
Block a user