chore: clear clippy errors, document all unsafe blocks, deny new SAFETY debt
Audit-driven cleanup pass. End state:
- cargo clippy --release --all-targets: 0 errors (was 4)
- undocumented_unsafe_blocks warnings: 0 (was 67)
- Cargo.toml: undocumented_unsafe_blocks escalated warn -> deny
Clippy correctness errors fixed:
- src/bin/{sw_encode_bench,vaapi_import_bench}.rs: receive_first_frame
rewritten per Oracle plan with total 10s deadline + 200ms wait slice +
while-let drain of all control events. The previous loop body always
exited on first iteration (never_loop); the new version actually retries
and matches production's repeated-poll semantics in state_portal.rs.
- src/avhw.rs: hash_sampled_y_plane tests now use a row_range(row, stride,
width) helper instead of inline stride * N. Preserves the row-index
intent across all sibling tests without tripping erasing_op (row==0) or
identity_op (row==1).
Machine-applicable clippy autofixes applied via 'cargo clippy --fix':
- unnecessary_cast, manual_is_multiple_of, needless_borrows_for_generic_args
- manual_abs_diff, derivable_impls, new_without_default
- unnecessary_map_or, unneeded_struct_pattern, redundant_locals
webrtc_gop_formula test rewritten to wrap the (fps * 2).max(20) formula in
a runtime lambda. The previous clippy --fix pass had constant-folded the
5fps case into assert_eq!(20, 20), silently stripping the floor-case
coverage. The lambda blocks the fold while keeping the formula exercisable.
67 SAFETY comments added across 7 files (cap_portal.rs 26, sw_encode_bench
21, state_portal.rs 7, vaapi_import_bench.rs 6, avhw.rs 5, state.rs 1,
main.rs 1). Two sites carry load-bearing invariant documentation:
- cap_portal.rs:806 process callback documents the PipeWire raw_buf
ownership contract across all 10 exit paths (audited: every path
correctly requeues; fd ownership via dup() is independent and also
exactly-once closed).
- avhw.rs:341 unsafe impl Send for EncState documents the single-thread
exclusivity assumption referenced by AGENTS.md.
All 97 unit tests + 3 integration tests still pass; cargo build --release
finishes clean. Lint escalation to deny freezes the SAFETY baseline: any
future patch adding an unsafe block without a // SAFETY: comment will fail
clippy at compile time.
This commit is contained in:
+8
-16
@@ -83,6 +83,7 @@ pub struct OutputInfo {
|
||||
pub logical_position: (i32, i32),
|
||||
}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct PartialOutputInfo {
|
||||
pub name: Option<String>,
|
||||
/// Name from wl_output::Name (v4) — used to match wlr-output-management heads
|
||||
@@ -95,19 +96,6 @@ pub struct PartialOutputInfo {
|
||||
pub done_count: u32,
|
||||
}
|
||||
|
||||
impl Default for PartialOutputInfo {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
name: None,
|
||||
wl_name: None,
|
||||
transform: None,
|
||||
physical_size: None,
|
||||
logical_position: None,
|
||||
mode_size: None,
|
||||
done_count: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Stores head info from wlr-output-management for name-based matching with wl_output.
|
||||
struct WlrHeadInfo {
|
||||
@@ -512,6 +500,10 @@ impl<S: CaptureSource> State<S> {
|
||||
unsafe {
|
||||
(*map_frame.as_mut_ptr()).format = ffi::AVPixelFormat::AV_PIX_FMT_DRM_PRIME as i32;
|
||||
}
|
||||
// SAFETY: map_frame and surface are valid, owned AVFrame pointers from
|
||||
// av_hwframe_get/surface.alloc above. AV_HWFRAME_MAP_READ flag (0 here)
|
||||
// requests a read-only mapping. The DRM_PRIME format set above instructs
|
||||
// FFmpeg to populate data[0] with an AVDRMFrameDescriptor on success.
|
||||
let ret = unsafe { ffi::av_hwframe_map(map_frame.as_mut_ptr(), surface.as_ptr(), 0) };
|
||||
if ret < 0 {
|
||||
tracing::error!("av_hwframe_map failed: {}", crate::avhw::ff_err(ret));
|
||||
@@ -1509,7 +1501,7 @@ impl<S: CaptureSource> Dispatch<ZwlrOutputManagerV1, ()> for State<S> {
|
||||
event: <ZwlrOutputManagerV1 as Proxy>::Event,
|
||||
_data: &(),
|
||||
_conn: &wayland_client::Connection,
|
||||
qhandle: &QueueHandle<State<S>>,
|
||||
_qhandle: &QueueHandle<State<S>>,
|
||||
) {
|
||||
match event {
|
||||
WlrOutputManagerEvent::Head { head } => {
|
||||
@@ -1530,7 +1522,7 @@ impl<S: CaptureSource> Dispatch<ZwlrOutputManagerV1, ()> for State<S> {
|
||||
}
|
||||
}
|
||||
}
|
||||
WlrOutputManagerEvent::Finished { .. } => {
|
||||
WlrOutputManagerEvent::Finished => {
|
||||
tracing::warn!("zwlr_output_manager_v1::Finished received during probing");
|
||||
}
|
||||
_ => {}
|
||||
@@ -1583,7 +1575,7 @@ impl<S: CaptureSource> Dispatch<ZwlrOutputHeadV1, ()> for State<S> {
|
||||
}
|
||||
}
|
||||
}
|
||||
WlrHeadEvent::Finished { .. } => {
|
||||
WlrHeadEvent::Finished => {
|
||||
tracing::debug!("zwlr_output_head_v1::Finished received");
|
||||
}
|
||||
_ => {}
|
||||
|
||||
Reference in New Issue
Block a user