1
0
Fork 0
forked from wry/wry

sync-obj: move sync-file merging to separate function

This commit is contained in:
Julian Orth 2026-03-01 11:54:17 +01:00
parent 29f3aaa93c
commit 52fae0b932

View file

@ -190,16 +190,9 @@ impl SyncObjCtx {
where
I: IntoIterator<Item = &'a SyncFile>,
{
let mut sync_files = sync_files.into_iter();
let Some(first) = sync_files.next() else {
let Some(fd) = merge_sync_files(sync_files)? else {
return self.signal(sync_obj, point);
};
let mut stash;
let mut fd = &*first.0;
for next in sync_files {
stash = sync_ioc_merge(fd.raw(), next.raw()).map_err(DrmError::Merge)?;
fd = &stash;
}
let dummy = self.get_dummy()?;
sync_obj_fd_to_handle(
self.inner.drm.raw(),
@ -258,3 +251,24 @@ fn destroy(drm: &OwnedFd, handle: SyncObjHandle) {
log::error!("Could not destroy sync obj: {}", ErrorFmt(e));
}
}
fn merge_sync_files<'a, I>(sync_files: I) -> Result<Option<SyncFile>, DrmError>
where
I: IntoIterator<Item = &'a SyncFile>,
{
let mut sync_files = sync_files.into_iter();
let Some(first) = sync_files.next() else {
return Ok(None);
};
let Some(second) = sync_files.next() else {
return Ok(Some(first.clone()));
};
let merge = |left: &OwnedFd, right: &OwnedFd| {
sync_ioc_merge(left.raw(), right.raw()).map_err(DrmError::Merge)
};
let mut fd = merge(first, second)?;
for next in sync_files {
fd = merge(&fd, next)?;
}
Ok(Some(SyncFile(Rc::new(fd))))
}