syncobj: ensure we only add waiters on succesful checks (#9412)

timeline check only returns nullopt on ETIME_ERR , meaning the if check
later on returns true if drmSyncobjTimelineWait returns anything else
like EINVAL/EPERM/EACCESS etc, so actually check the returned .value()
of the std::optional. also move the fd to rvalue references.
This commit is contained in:
Tom Englund
2025-02-15 14:48:52 +01:00
committed by GitHub
parent 2f967037aa
commit 3eb6cb1875
2 changed files with 3 additions and 3 deletions

View File

@@ -75,7 +75,7 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(SP<CWpLinuxDrmSyncobjSurf
return; return;
} }
if (materialized) if (materialized.value())
return; return;
surface->lockPendingState(); surface->lockPendingState();
@@ -104,7 +104,7 @@ bool CDRMSyncobjSurfaceResource::good() {
return resource->resource(); return resource->resource();
} }
CDRMSyncobjTimelineResource::CDRMSyncobjTimelineResource(SP<CWpLinuxDrmSyncobjTimelineV1> resource_, CFileDescriptor fd_) : fd(std::move(fd_)), resource(resource_) { CDRMSyncobjTimelineResource::CDRMSyncobjTimelineResource(SP<CWpLinuxDrmSyncobjTimelineV1> resource_, CFileDescriptor&& fd_) : fd(std::move(fd_)), resource(resource_) {
if UNLIKELY (!good()) if UNLIKELY (!good())
return; return;

View File

@@ -33,7 +33,7 @@ class CDRMSyncobjSurfaceResource {
class CDRMSyncobjTimelineResource { class CDRMSyncobjTimelineResource {
public: public:
CDRMSyncobjTimelineResource(SP<CWpLinuxDrmSyncobjTimelineV1> resource_, Hyprutils::OS::CFileDescriptor fd_); CDRMSyncobjTimelineResource(SP<CWpLinuxDrmSyncobjTimelineV1> resource_, Hyprutils::OS::CFileDescriptor&& fd_);
~CDRMSyncobjTimelineResource() = default; ~CDRMSyncobjTimelineResource() = default;
static SP<CDRMSyncobjTimelineResource> fromResource(wl_resource*); static SP<CDRMSyncobjTimelineResource> fromResource(wl_resource*);