summaryrefslogtreecommitdiff
path: root/src/protocols/Screencopy.cpp
diff options
context:
space:
mode:
authorLee Bousfield <ljbousfield@gmail.com>2025-04-12 09:38:46 -0500
committerGitHub <noreply@github.com>2025-04-12 16:38:46 +0200
commit0399e64274ae5c05a7a40ad78e4d4852d9957e99 (patch)
treeab68d920b59ec2ff80e2a8c69ec6ded6a20069bc /src/protocols/Screencopy.cpp
parent382f0f23f144e11bdccac6c5d3c1ed415b4b1855 (diff)
screencopy: Handle explicit sync failure (#10050)
Diffstat (limited to 'src/protocols/Screencopy.cpp')
-rw-r--r--src/protocols/Screencopy.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/protocols/Screencopy.cpp b/src/protocols/Screencopy.cpp
index afa61f36..d5a5f816 100644
--- a/src/protocols/Screencopy.cpp
+++ b/src/protocols/Screencopy.cpp
@@ -231,16 +231,17 @@ void CScreencopyFrame::copyDmabuf(std::function<void(bool)> callback) {
auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(pMonitor->output);
if (pMonitor->inTimeline && explicitOptions.explicitEnabled) {
- pMonitor->inTimeline->addWaiter(
- [callback]() {
- LOGM(TRACE, "Copied frame via dma with explicit sync");
- callback(true);
- },
- pMonitor->inTimelinePoint, 0);
- } else {
- LOGM(TRACE, "Copied frame via dma");
- callback(true);
+ if (pMonitor->inTimeline->addWaiter(
+ [callback, sync = pMonitor->eglSync]() {
+ LOGM(TRACE, "Copied frame via dma with explicit sync");
+ callback(true);
+ },
+ pMonitor->inTimelinePoint, 0))
+ return;
+ // on explicit sync failure, fallthrough to immediate callback
}
+ LOGM(TRACE, "Copied frame via dma");
+ callback(true);
}
bool CScreencopyFrame::copyShm() {