summaryrefslogtreecommitdiff
path: root/src/protocols/DRMSyncobj.cpp
diff options
context:
space:
mode:
authorEdgars Cīrulis <edgarsciruliss@gmail.com>2024-10-12 03:12:07 +0300
committerGitHub <noreply@github.com>2024-10-12 01:12:07 +0100
commitf5db4839730643169b7e8b7fb6ae2fbb8743ebe9 (patch)
tree99c531169c053e7b42025872d84a9c2c6b5a9c6d /src/protocols/DRMSyncobj.cpp
parent7564b26b7d386d248eaa47c1a481c09eefd8e3ca (diff)
drm-timeline: Add check for conflicting acquire and release points (#8083)
Signed-off-by: Edgars Cirulis <edgarsciruliss@gmail.com>
Diffstat (limited to 'src/protocols/DRMSyncobj.cpp')
-rw-r--r--src/protocols/DRMSyncobj.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp
index 4993f1a4..a7f242ee 100644
--- a/src/protocols/DRMSyncobj.cpp
+++ b/src/protocols/DRMSyncobj.cpp
@@ -55,8 +55,13 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(SP<CWpLinuxDrmSyncobjSurf
return;
}
- if (!pending.acquireTimeline)
- return;
+ if (pending.acquireTimeline && pending.releaseTimeline && pending.acquireTimeline == pending.releaseTimeline) {
+ if (pending.acquirePoint >= pending.releasePoint) {
+ resource->error(WP_LINUX_DRM_SYNCOBJ_SURFACE_V1_ERROR_CONFLICTING_POINTS, "Acquire and release points are on the same timeline, and acquire >= release");
+ surface->pending.rejected = true;
+ return;
+ }
+ }
// wait for the acquire timeline to materialize
auto materialized = pending.acquireTimeline->timeline->check(pending.acquirePoint, DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE);