chore: consolidate all in-progress parallel-session WIP
audit / bun-audit (push) Successful in 27s
windows-drivers / probe-and-proto (push) Successful in 49s
ci / web (push) Successful in 1m1s
ci / docs-site (push) Successful in 1m10s
apple / swift (push) Successful in 1m18s
decky / build-publish (push) Successful in 34s
windows-drivers / driver-build (push) Successful in 1m37s
audit / cargo-audit (push) Successful in 3m1s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 42s
ci / bench (push) Successful in 5m56s
windows-host / package (push) Failing after 5m17s
apple / screenshots (push) Successful in 4m45s
windows-msix / package (arm64, C:\Users\Public\ffmpeg-arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (push) Successful in 4m38s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 11m3s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 1m2s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 8m6s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 11m6s
windows-msix / package (x64, C:\Users\Public\ffmpeg, , x86_64-pc-windows-msvc, C:\t) (push) Successful in 4m15s
arch / build-publish (push) Successful in 16m50s
android / android (push) Successful in 17m7s
docker / deploy-docs (push) Successful in 28s
deb / build-publish (push) Successful in 17m6s
ci / rust (push) Failing after 19m1s
windows / build (aarch64-pc-windows-msvc) (push) Successful in 5m3s
flatpak / build-publish (push) Successful in 8m0s
windows / build (x86_64-pc-windows-msvc) (push) Successful in 5m42s
rpm / build-publish (43, bazzite, punktfunk-fedora-rpm) (push) Successful in 14m29s
rpm / build-publish (44, fedora-44, punktfunk-fedora44-rpm) (push) Successful in 14m14s
release / apple (push) Successful in 5m44s

Wholesale commit of every uncommitted change across the tree, at the user's
explicit request — host refactor-campaign W1 (native.rs facade + native/ dir,
library/ + mgmt/ splits), Android, core. These streams were mid-flight and not
individually built/tested together; this supersedes the per-session HOLD
markers. Consolidating so everything lands on main in one pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-16 20:08:29 +02:00
parent 07e2836601
commit ecfa71212d
67 changed files with 9456 additions and 8062 deletions
+21 -13
View File
@@ -89,18 +89,24 @@ pub fn acquire(
mode: super::Mode,
quit: std::sync::Arc<std::sync::atomic::AtomicBool>,
) -> Result<super::VirtualOutput> {
let backend = vd.name();
#[cfg(target_os = "linux")]
{
linux::acquire(vd, mode, quit)
}
let out = linux::acquire(vd, mode, quit);
#[cfg(not(target_os = "linux"))]
{
let out = {
// Windows leases in the manager (its own linger); its deliberate-quit skip is wired through
// `VirtualDisplay::set_quit_flag` on the backend instance (set by the session before any
// `create`, so the retry-hold lease gets it too) — not through this parameter.
let _ = quit;
vd.create(mode)
};
if out.is_ok() {
crate::events::emit(crate::events::EventKind::DisplayCreated {
backend: backend.to_string(),
mode: crate::events::mode_str(mode.width, mode.height, mode.refresh_hz),
});
}
out
}
/// Snapshot the host's managed virtual displays. Cheap + side-effect-free (a state-lock read);
@@ -149,20 +155,22 @@ pub fn snapshot() -> Snapshot {
/// released.
pub fn release(slot: Option<u64>) -> usize {
#[cfg(target_os = "windows")]
{
// Windows slots (Stage W1): `slot` selects one kept monitor by its gen stamp
// ([`DisplayInfo::slot`]); `None` releases every kept one.
super::manager::force_release(slot)
}
// Windows slots (Stage W1): `slot` selects one kept monitor by its gen stamp
// ([`DisplayInfo::slot`]); `None` releases every kept one.
let released = super::manager::force_release(slot);
#[cfg(target_os = "linux")]
{
linux::force_release(slot)
}
let released = linux::force_release(slot);
#[cfg(not(any(target_os = "windows", target_os = "linux")))]
{
let released = {
let _ = slot;
0
};
if released > 0 {
crate::events::emit(crate::events::EventKind::DisplayReleased {
count: released as u32,
});
}
released
}
/// Tear down a **reused-but-dead** pool entry by its generation stamp (A2). Called by the pipeline
@@ -260,7 +260,7 @@ pub(crate) struct VirtualDisplayManager {
/// Serializes IDD-push session SETUP (preempt + monitor create) — MANAGER-WIDE even with slots:
/// monitor create/teardown stays serialized (the 400 ms async-departure settle and the IddCx
/// slot-budget wedge both want zero concurrent ADD/REMOVE). Held by the session across the
/// pipeline build (was the `IDD_SETUP_LOCK` global in `punktfunk1`).
/// pipeline build (was the `IDD_SETUP_LOCK` global in `native`).
setup_lock: Mutex<()>,
/// Per-SLOT IDD-push session stop flags: a new connection signals only the stop of a session
/// holding *that identity's* slot (the same-client zombie-reconnect preempt, slot-scoped since
@@ -1392,7 +1392,7 @@ impl VirtualDisplayManager {
}
/// Begin an IDD-push session setup (Goal-1 §2.5 — was the `IDD_SETUP_LOCK` / `IDD_SESSION_STOP` /
/// `wait_for_monitor_released` dance smeared across `punktfunk1`). Serializes via the (manager-wide)
/// `wait_for_monitor_released` dance smeared across `native`). Serializes via the (manager-wide)
/// setup lock, registers THIS session's stop flag on its SLOT while signalling the prior session
/// holding that slot to stop, and waits for it to release the slot's monitor — so a reconnect
/// (whose reused IddCx swap-chain is dead) preempts the stale session cleanly before a fresh